25.13.2. 与 JMS 相比请求和使用专用固定回复队列


在上例中,Camel 会预测固定的回复队列被共享,因此它使用 JMSSelector 来只使用它期望的回复消息。但是,这样做会有一个缺陷,因为 JMS 选择器会较慢。另外,回复队列中的使用者也较慢,以使用新的 JMS 选择器 id 进行更新。实际上,它只有在 receiveTimeout 选项超时时才会更新,默认为 1 秒。因此,在理论上,回复信息会占用大约 1 sec 要被检测到的问题。另一方面,如果固定的回复队列专用于 Camel 回复消费者,我们可以避免使用 JMS 选择器,因而更高性能。实际上,就像使用临时队列一样。您可以将 ReplyToType 选项配置为排除
,以告知 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)

from(aaa)
.inOut().to("activemq:queue:order?replyTo=order.reply&replyToType=Exclusive")
.to(bbb)

在集群环境中运行时同样适用。然后,集群中的每个节点都必须使用唯一的回复队列名称。否则,集群中的每个节点都会选择在另一个节点上用作回复的消息。对于集群环境,建议使用共享回复队列。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.