19.6. 避免反模式
尽可能重复使用连接、会话、消费者和制作者。
最常见的消息传递反模式是为发送或消耗的每条消息创建新连接、会话和制作者。这些对象需要时间创建,并可能需要多次网络往返,这对资源的使用不佳。
注意Spring JMS 模板等一些流行的库使用这些反模式。如果您使用 Spring JMS 模板,您可能会看到性能不佳。Spring JMS 模板只能安全地在缓存 JMS 会话的应用服务器中使用,例如使用 Java Connector 架构,然后仅用于发送消息。即使在应用服务器中,它也无法安全地使用消息。
避免 fat 消息。
详细格式(如 XML)会占用线线上的大量空间,因此性能会受到影响。如果需要,请避免消息正文中的 XML。
不要为每个请求创建临时队列。
这种常见的反模式涉及临时队列请求响应模式。使用临时队列请求响应模式时,会将消息发送到目标,并使用本地临时队列的地址设置回复标头。当接收者收到消息时,它们处理它,然后发回一个响应到 reply-to 标头中指定的地址。使用这个模式的常见错误是在每个发送的消息上创建新的临时队列,这大大降低了性能。相反,应该对许多请求重复使用临时队列。
除非必要,否则不要使用消息驱动的 Bean。
使用消息驱动的 Bean 使用简单的 JMS 消息使用者来消耗消息的速度比消耗消息要慢。