31.9. 关于使用 Camel 来发送和接收消息,以及 JMSReplyTo
JMS 组件比较复杂,您必须特别注意它在某些情况下如何工作。因此,这是要查找的一些 Region/pitfalls 的简短摘要。
当 Camel 使用其 JMSProducer
发送消息时,它会检查以下条件:
- 消息交换模式,
-
在端点或消息标头中设置了
JMSReplyTo
, -
是否在 JMS 端点上设置了以下选项:
disableReplyTo
、preserveMessageQos
,explicitQosEnabled
。
所有这些都很复杂,理解并配置来支持您的用例。
31.9.1. JmsProducer
JmsProducer
的行为如下,具体取决于配置:
交换模式 | 其他选项 | 描述 |
---|---|---|
InOut | - |
Camel 将期望回复,设置临时 |
InOut |
|
Camel 将期望回复,并在发送消息后,它将开始侦听指定的 |
InOnly | - | Camel 将发送邮件,而不是 预期回复。 |
InOnly |
|
默认情况下,Camel 会丢弃 |
31.9.2. JmsConsumer
JmsConsumer
的行为如下,具体取决于配置:
交换模式 | 其他选项 | 描述 |
---|---|---|
InOut | - |
Camel 将回复发送回 |
InOnly | - | Camel 不会发送回复回来,因为模式是 InOnly。 |
- |
| 这个选项会阻止回复。 |
请注意您在交换上设置的消息交换模式。
如果您在路由中间向 JMS 目的地发送消息,您可以指定要使用的交换模式,请参阅 Request Reply。
如果您要向 JMS 主题发送 InOnly
信息,这非常有用:
from("activemq:queue:in") .to("bean:validateOrder") .to(ExchangePattern.InOnly, "activemq:topic:order") .to("bean:handleOrder");