28.13.2. 请求通过 JMS 并使用专用固定回复队列
在上例中,Camel 将预测名为"bar"的固定回复队列,因此它使用 JMSSelector 来仅使用期望的回复消息。但是,由于 JMS 选择器较慢,这样做存在缺陷。另外,回复队列中的使用者速度较慢,使用新的 JMS 选择器 ID 进行更新。实际上,它只在 receiveTimeout 选项超时时更新,这默认为 1 秒。因此,在理论上,回复信息可能会占用大约 1 sec 的时间。另一方面,如果固定的回复队列专用于 Camel 回复消费者,那么我们可以避免使用 JMS 选择器,因此更高性能。实际上,使用临时队列一样快。有 ReplyToType 选项,您可以将它配置为 Exclusive
来告知 Camel 回复队列是独占的,如下例所示:
from(xxx)
.inOut().to("activemq:queue:foo?replyTo=bar&replyToType=Exclusive")
.to(yyy)
from(xxx)
.inOut().to("activemq:queue:foo?replyTo=bar&replyToType=Exclusive")
.to(yyy)
请记住,队列必须专用于每个端点和每个端点。因此,如果您有两个路由,则每个路由都需要一个唯一的回复队列,如下例所示:
如果您在集群环境中运行时也是如此。然后,集群中的每个节点都必须使用唯一的回复队列名称。否则,集群中的每个节点可能会选择在另一节点上回复的信息。对于集群环境,建议使用共享的回复队列。