【发布时间】:2017-12-16 00:45:30
【问题描述】:
如何在分布式消息队列中使用 Camel?基本上我有三个服务的系统,其中 A 是 SOAP 客户端的同步边界。 A 调用服务 C,但从服务 B 获取结果集。运行每个服务的多个实例以保证高可用性。
我必须使用异步消息传递(消息队列),因为请求的结果必须来自与调用不同的服务(C 无法获得 B 的结果集,A 也无法获得 C 的结果集,因此服务不能同步链接)。最大的挑战是将响应消息路由到正确的实例/线程(A 是 同步 服务,它在获得结果之前一直处于阻塞状态)。经过研究,我发现 JMS 为此提供了两种方法:JMSCorrelationID 和 JMSReplyTo 标头。 Camel 似乎可以透明地处理这些标头。
但还有更大的挑战。当然,我还必须运行消息队列的多个实例来保证高可用性。如果任何消息队列出现故障,系统仍然可用。
Camel 为分布式队列提供了哪些开箱即用的支持? 假设我在 Weblogic 中配置了 JMS 集群,并希望利用它在骆驼。我需要什么样的特殊配置?请注意,在此示例中,我们使用了两个不同的队列(或队列集群),因为 Secret result 和 Result 消息不能在同一个队列或服务器实例上进行冥想,但仍然必须始终保持消息之间的相关性。
【问题讨论】:
-
您需要满足一些极其复杂的要求。我不确定 Camel 是否是您在这里需要的,因为这听起来应该是一个应用程序而不是一个集成。但是,如果你坚持使用 Camel,我想你可以使用 recipientList 根据运行时的一些计算来设置接收 JMS 队列(我猜是代理)。
标签: jakarta-ee apache-camel jms microservices messaging