57.2. URI 格式
jms:[queue:|topic:]destinationName[?options]
jms:[queue:|topic:]destinationName[?options]
其中 destinationName 是 JMS 队列或主题名称。默认情况下,destinationName 解释为队列名称。例如,要连接到队列,使用 FOO.BAR :
jms:FOO.BAR
jms:FOO.BAR
如果需要,您可以包含可选的 queue: 前缀:
jms:queue:FOO.BAR
jms:queue:FOO.BAR
要连接到主题,您必须 包含 topic: 前缀。例如,要连接到主题 Stocks.Prices,请使用:
jms:topic:Stocks.Prices
jms:topic:Stocks.Prices
您可以使用以下格式将查询选项附加到 URI 中,
?option=value&option=value&…
57.2.1. 使用 ActiveMQ 复制链接链接已复制到粘贴板!
JMS 组件重复使用 Spring 2 的 JmsTemplate 来发送消息。这不是在非J2EE 容器中使用的理想选择,通常需要 JMS 提供程序中的一些缓存以避免 性能不佳。
如果要将 Apache ActiveMQ 用作消息代理,建议执行以下操作之一:
- 使用 ActiveMQ 组件,该组件经过优化以高效地使用 ActiveMQ
-
在 ActiveMQ 中使用
PoolingConnectionFactory。
57.2.2. 事务和缓存级别 复制链接链接已复制到粘贴板!
如果您使用消息并使用事务(transacted=true),缓存级别的默认设置可能会影响性能。
如果您使用 XA 事务,则无法缓存,因为它可能会导致 XA 事务无法正常工作。
如果您不使用 XA,则应考虑缓存速度,如设置 cacheLevelName=CACHE_CONSUMER。
cacheLevelName 的默认设置是 CACHE_AUTO。这个默认会自动检测模式,并相应地将缓存级别设置为:
-
如果transacted=false -
如果transacted=true
因此,您可以说默认设置比较保守。如果您使用非 XA 事务,请考虑使用 cacheLevelName=CACHE_CONSUMER。
57.2.3. 带有 JMS 1.1 的持久化订阅 复制链接链接已复制到粘贴板!
如果要使用持久主题订阅,则需要同时指定 clientId 和 durableSubscriptionName。clientId 的值必须是唯一的,且只能由整个网络中的单个 JMS 连接实例使用。
如果您使用 Apache ActiveMQ Classic,您可能更喜欢使用名为 Virtual Topic 的功能。这应该删除具有唯一 clientId 的要求。您可以查阅 Artemis 或 ActiveMQ Classic 的特定文档,以了解有关如何使用此功能的详细信息。您可以在此处找到有关 ActiveMQ 经典持久消息传递的更多详细信息。http://activemq.apache.org/how-do-durable-queues-and-topics-work.html
57.2.3.1. 带有 JMS 2.0 的持久化订阅 复制链接链接已复制到粘贴板!
如果要使用持久主题订阅,则需要指定 durableSubscriptionName。
57.2.4. Message Header Mapping 复制链接链接已复制到粘贴板!
在使用消息标头时,JMS 规范指出标头名称必须是有效的 Java 标识符。因此,请尝试将您的标头命名为有效的 Java 标识符。执行此操作的一个优点是,您可以在 JMS Selector 中使用您的标头(其 SQL92 语法强制使用标头的 Java 标识符语法)。
默认使用映射标头名称的简单策略。策略是替换标头名称中的任何点和连字符,并在从线上发送的 JMS 消息恢复标头名称时反转替换。这意味着什么?不会再丢失在 bean 组件上调用的方法名称,不再丢失 File 组件的文件名标头,以此类推。
在 Camel 中接受标头名称的当前标头名称策略如下:
- 当 Camel 使用消息时,点被 'DOT' 替换,替换会被反向替换
- hyphen 被 'HYPHEN' 替换,当 Camel 使用消息时,替换会被反向替换
您可以在 JMS 端点上配置许多不同的属性,该属性映射到 JMSConfiguration 对象的属性。
映射到 Spring JMS
很多属性映射到 Spring JMS 上的属性,Camel 用来发送和接收消息。因此,您可以通过咨询相关的 Spring 文档来获取有关这些属性的更多信息。