如何高效使用 JMS
常见问题解答 > JMS > 如何高效使用 JMS
如何高效使用 JMS?
JMS 旨在实现高性能。特别是,它的设计意味着您应该在应用程序启动时预先创建多个对象,然后在整个应用程序中重复使用它们。例如,建议您预先创建并重复使用以下对象:
- 连接
- 会话
- 消息生产者
- 消息消费者
原因是,上面每个对象的创建和销毁通常都需要与 JMS 代理进行单独的请求和响应,以确保其正常工作。例如,创建连接、会话、生产者,然后发送消息,最后关闭所有内容,可能会导致与服务器进行 7 次请求-响应!
注意一个小技巧 - 您可以重复使用相同的 MessageProducer 来向不同的目的地发送消息;只需使用空目的地创建它,并在发送方法中指定它。
使用空目的地创建的 MessageProducer 实例是匿名生产者,因此代理在创建这些实例时不会触发生产者警报。这意味着当池化的 MessageProducer 正在使用时,将永远不会发送生产者警报。
在 JMS 中使用池化
为了高效使用 JMS,我们建议您使用 Camel 来隐藏 JMS API 并 将消息传递绑定到您的 Bean。
或者,尝试使用 Spring 的 MessageListenerContainer 来消费消息,并使用 JmsTemplate 来发送消息 - 但请 注意一些问题
其他性能提示
另请参阅
Java 连接器体系结构
Java 连接器体系结构 通过使用 JCA 资源适配器 支持对 JMS 连接、会话和 MessageListeners 进行池化,以及并行消息处理、线程池化以及事务和异常处理。
所有这些优势都可以在 Spring 的 MessageListenerContiner 中获得,**除了** XA 事务。如果您需要 XA 支持,则必须使用 JCA。
JCA 通常在 J2EE 容器中通过 MDB 使用;尽管存在一个基于 POJO 的 Spring JCA 容器,您可以使用它,它简单、轻量级且易于嵌入到 Tomcat 或任何 J2SE 应用程序中。