第 28 章 JMS


支持制作者和消费者

此组件允许将消息发送到(或从 )发送到 JMS Queue 或 Topic。它使用 Spring 的 JMS 支持来声明性事务,包括 Spring 的 JmsTemplate 以用于发送和 MessageListenerContainer 进行消耗。

Maven 用户需要将以下依赖项添加到其 pom.xml 中:

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-jms</artifactId>
    <version>{CamelSBVersion}</version>
    <!-- use the same version as your Camel core version -->
</dependency>
注意

如果使用 ActiveMQ
,您应该优先使用 ActiveMQ 组件,因为它针对 ActiveMQ 进行了优化。此页面上的所有选项和示例均对 ActiveMQ 组件也有效。

注意

如果您正在使用 JMS 事务,则转换和缓存
查看以下小节事务和缓存级别
,因为它可能会影响性能。

注意

请求/恢复超过 JMS
,确保阅读 此页面上的"请求 "部分请求,关于请求/回复的重要备注,因为 Camel 提供了多个选项来配置性能和集群环境。

28.1. URI 格式

jms:[queue:|topic:]destinationName[?options]

其中 destinationName 是 JMS 队列或主题名称。默认情况下,targetName 解释为队列名称。例如,要连接到队列,FOO.BAR 使用:

jms:FOO.BAR

如果需要,可以包括可选 queue: 前缀:

jms:queue:FOO.BAR

要连接到一个主题,您必须 包括 主题: 前缀。例如,要连接到主题(rades .Prices), 请使用:

jms:topic:Stocks.Prices

您可以使用以下格式将查询选项附加到 URI,

?option=value&option=value&…

28.1.1. 使用 ActiveMQ

JMS 组件重复使用 Spring 2 的 JmsTemplate 来发送消息。这在非 J2EE 容器中并不是理想,通常需要在 JMS 提供者中使用一些缓存,以避免 性能不佳

如果要将 Apache ActiveMQ 用作您的消息代理,则建议您进行以下操作之一:

  • 使用 ActiveMQ 组件,该组件经过优化来高效地使用 ActiveMQ
  • 在 ActiveMQ 中使用 PoolingConnectionFactory

28.1.2. 事务和缓存级别

如果您使用消息并使用事务(transacted=true),缓存级别的默认设置可能会影响性能。

如果您使用 XA 事务,则无法缓存,因为它可能会导致 XA 事务无法正常工作。

如果您不使用 XA,您应该考虑缓存,因为它会提高性能,如设置 cacheLevelName=CACHE_CONSUMER

cacheLevelName 的默认设置是 CACHE_AUTO。这个默认自动检测模式,并相应地设置缓存级别:

  • CACHE_CONSUMER if transacted=false
  • CACHE_NONE if transacted=true

因此,您可以说默认设置是保守。如果您正在使用非XA 事务,请考虑使用 cacheLevelName=CACHE_CONSUMER

28.1.3. durable 订阅

如果要使用 durable 主题订阅,则需要同时指定 clientIddurableSubscriptionNameclientId 的值必须是唯一的,且只能供整个网络中的单个 JMS 连接实例使用。您可能更愿意 使用虚拟主题 来避免此限制。此处为 持久消息传递的更多背景信息。

28.1.4. Message Header Mapping

在使用消息标头时,JMS 规范声明标头名称必须是有效的 Java 标识符。因此,尝试将您的标头命名为有效的 Java 标识符。这样做的一个优点是,您可以在 JMS Selector (其 SQL92 语法要求标头的 Java 标识符语法)中使用您的标头。

默认使用映射标头名称的简单策略。该策略是替换下方所示的标题名称中的任何点和连字符,并在标题名称恢复通过线路发送的 JMS 消息时进行反转。这意味着什么?不再丢失了在 bean 组件上调用的方法名称,不再会丢失文件组件的文件名标头,以此类推。

在 Camel 中接受标头名称的当前标头名称策略如下:

  • dots 被 'DOT' 替换,当 Camel 使用消息时替换替换
  • 连字符由 'HYPHEN' 替换,在 Camel 使用消息时反转。

您可以在 JMS 端点上配置许多不同的属性,它们映射到 JMSConfiguration 对象上的属性。

注意

映射到 Spring JMS
的属性映射到 Spring JMS 上的属性,Camel 用来发送和接收消息。因此,您可以通过咨询相关的 Spring 文档来获取有关这些属性的更多信息。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.