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");
from("activemq:queue:in")
.to("bean:validateOrder")
.to(ExchangePattern.InOnly, "activemq:topic:order")
.to("bean:handleOrder");