14.3. 优化客户端 - 通过防火墙 JMS 性能
概述 复制链接链接已复制到粘贴板!
两种主要设置会影响客户端的 JMS 性能:池和同步接收。
池 复制链接链接已复制到粘贴板!
在客户端一端,CXF 会为每条消息创建一个新的 JMS 会话和 JMS producer。因此,因为 session 和 producer 对象都不安全。创建制作者特别要花费大量时间,因为它需要与服务器通信。
池连接工厂通过缓存连接、会话和制作者来提高性能。
对于 ActiveMQ,配置池是简单的;例如:
有关共用的更多信息,请参阅 Red Hat JBoss Fuse 事务指南中的"Appendix A Optimizing Performance of JMS Single- and Multiple-Resource Transactions"。
避免同步接收 复制链接链接已复制到粘贴板!
对于请求/重新交换,JMS 传输会发送请求,然后等待回复。在可能的情况下,使用 JMS MessageListener
以异步方式实施请求/回复。
但是,当 CXF 需要共享端点之间的队列时,CXF 必须使用 synchronous Consumer.receive ()
方法。此场景需要 MessageListener
来使用消息选择器来过滤消息。邮件选择器必须提前已知,因此 MessageListener
只只打开一次。
应该避免避免出现消息选择器的两种情况:
当将
JMSMessageID
用作JMSCorrelationID
时如果 JMS
属性使用ConduitIdSelector
和conduitSelectorPrefix
,则客户端不会设置JMSCorrelationId
。这会导致服务器使用JMSMessageId
请求的消息作为JMSCorrelationId
。由于JMSMessageID
无法事先知道,客户端必须使用同步的Consumer.receive ()
方法。请注意,您必须将
Consumer.receive ()
方法用于 IBM JMS 端点(默认)。用户在请求消息中设置
JMStype
,然后设置自定义JMSCorrelationID
。同样,因为无法事先知道自定义
JMSCorrelationID
,客户端必须使用同步的Consumer.receive ()
方法。
因此,常规规则是避免使用需要同步接收的设置。