26.9. 关于使用 Camel 发送和接收消息和 JMSReplyTo
JMS 组件比较复杂,您必须密切关注它在一些情况下的工作方式。这是要查找的一些区域/pitfall的简短总结。
当 Camel 使用其 JMSProducer
发送消息时,它会检查以下条件:
- 消息交换模式,
-
是否在端点或消息标头中设置
JMSReplyTo
, -
在 JMS 端点上是否设置了下列任何选项:
disableReplyTo
,preserveMessageQos
,explicitQosEnabled
。
这可能很复杂,可以理解和配置以支持您的用例。
26.9.1. JmsProducer 复制链接链接已复制到粘贴板!
JmsProducer
的行为如下,具体取决于配置:
Exchange Pattern | 其他选项 | 描述 |
---|---|---|
InOut | - |
Camel 将预期一个回复,设置一个临时 |
InOut |
|
Camel 将期望回复并在发送邮件后,它将开始侦听指定 |
仅限 | - | Camel 将发送消息 而不是 期望回复。 |
仅限 |
|
默认情况下,Camel 丢弃 |
26.9.2. JmsConsumer 复制链接链接已复制到粘贴板!
JmsConsumer
的行为如下,具体取决于配置:
Exchange Pattern | 其他选项 | 描述 |
---|---|---|
InOut | - |
Camel 将回复发送回 |
仅限 | - | Camel 不会发送回复,因为模式是 InOnly。 |
- |
| 这个选项会阻止回复。 |
因此,请注意交换上设置的消息交换模式。
如果您在路由中间向 JMS 目的地发送一条消息,您可以指定要使用的交换模式,请参阅 Request Reply。
如果您要向 JMS 主题发送 InOnly
消息,这很有用:
from("activemq:queue:in") .to("bean:validateOrder") .to(ExchangePattern.InOnly, "activemq:topic:order") .to("bean:handleOrder");
from("activemq:queue:in")
.to("bean:validateOrder")
.to(ExchangePattern.InOnly, "activemq:topic:order")
.to("bean:handleOrder");