搜索

31.9. 关于使用 Camel 来发送和接收消息,以及 JMSReplyTo

download PDF

JMS 组件比较复杂,您必须特别注意它在某些情况下如何工作。因此,这是要查找的一些 Region/pitfalls 的简短摘要。

当 Camel 使用其 JMSProducer 发送消息时,它会检查以下条件:

  • 消息交换模式,
  • 在端点或消息标头中设置了 JMSReplyTo
  • 是否在 JMS 端点上设置了以下选项: disableReplyTopreserveMessageQos,explicitQosEnabled

所有这些都很复杂,理解并配置来支持您的用例。

31.9.1. JmsProducer

JmsProducer 的行为如下,具体取决于配置:

交换模式其他选项描述

InOut

-

Camel 将期望回复,设置临时 JMSReplyTo,并在发送消息后,它将开始侦听临时队列上的回复消息。

InOut

JMSReplyTo 被设置

Camel 将期望回复,并在发送消息后,它将开始侦听指定的 JMSReplyTo 队列上的回复消息。

InOnly

-

Camel 将发送邮件,而不是 预期回复。

InOnly

JMSReplyTo 被设置

默认情况下,Camel 会丢弃 JMSReplyTo 目的地,并在发送消息前清除 JMSReplyTo 标头。然后 Camel 会发送消息 且不 期望回复。Camel 会在 WARN 级别的日志中记录它(从 Camel 2.6 改为 DEBUG 级别)。您可以使用 preserveMessageQuo=true 来指示 Camel 保留 JMSReplyTo。在所有情况下,JmsProducer 并不 期望任何回复,因此在发送消息后继续。

31.9.2. JmsConsumer

JmsConsumer 的行为如下,具体取决于配置:

交换模式其他选项描述

InOut

-

Camel 将回复发送回 JMSReplyTo 队列。

InOnly

-

Camel 不会发送回复回来,因为模式是 InOnly

-

disableReplyTo=true

这个选项会阻止回复。

请注意您在交换上设置的消息交换模式。

如果您在路由中间向 JMS 目的地发送消息,您可以指定要使用的交换模式,请参阅 Request Reply。
如果您要向 JMS 主题发送 InOnly 信息,这非常有用:

from("activemq:queue:in")
   .to("bean:validateOrder")
   .to(ExchangePattern.InOnly, "activemq:topic:order")
   .to("bean:handleOrder");
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.