47.10. 关于使用 Camel 来发送和接收消息和 JMSReplyTo
JMS 组件比较复杂,您必须密切注意它在某种情况下的工作方式。因此,这是要查找的一些区域/区域的简短摘要。
当 Camel 使用其 JMSProducer 发送消息时,它会检查以下条件:
- 消息交换模式,
-
是否在端点或消息标头中设置
JMSReplyTo。 -
是否在 JMS 端点上设置了任何以下选项:
disableReplyTo,preserveMessageQos,explicitQosEnabled。
所有这些都很复杂,需要理解并配置 以支持您的用例。
47.10.1. JmsProducer 复制链接链接已复制到粘贴板!
根据配置,Jms Producer 的行为如下:
| Exchange Pattern | 其他选项 | 描述 |
|---|---|---|
| InOut | - |
Camel 将期望一个回复,设置一个临时 |
| InOut |
设置了 |
Camel 将预期回复,在发送消息后,它将开始侦听指定的 |
| InOnly | - | Camel 将发送消息,而不是 预期回复。 |
| InOnly |
设置了 |
默认情况下,Camel 会丢弃 |
47.10.2. JmsConsumer 复制链接链接已复制到粘贴板!
JmsConsumer 的行为如下,具体取决于配置:
| Exchange Pattern | 其他选项 | 描述 |
|---|---|---|
| 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");
from("activemq:queue:in")
.to("bean:validateOrder")
.to(ExchangePattern.InOnly, "activemq:topic:order")
.to("bean:handleOrder");