首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在多线程apache camel应用程序中维护排序

在多线程apache camel应用程序中维护排序
EN

Stack Overflow用户
提问于 2017-09-29 21:00:07
回答 1查看 563关注 0票数 0

我们使用Tibco EMS作为消息传递系统,并使用apache camel编写应用程序。在我们的应用程序中,消息被写入队列。concurrentConsumers设置为8的组件从队列读取,处理消息,然后写入另一个队列。另一个组件,同样将concurrentConsumers设置为8,然后从这个新队列读取数据,依此类推。到目前为止,维护消息顺序并不重要,但新的需求意味着它现在是重要的。查看camel文档,建议使用jmsxgroupid来维护排序。不幸的是,此功能在Tibco EMS中不可用。在多线程应用程序中,有没有其他方法来维护camel中的排序?我已经研究了粘性负载平衡,但这似乎只适用于端点负载平衡。

谢谢

布鲁斯

EN

回答 1

Stack Overflow用户

发布于 2017-10-02 10:05:09

在企业集成世界中,我们通常使用Resequencer设计模式来解决这样的问题,您需要确保消息中的顺序。

Apache Camel涵盖了广泛的企业集成模式,包括其核心的Resequencer,并且它具有对这些模式的开箱即用的影响。所以你要找的应该是这样的:

http://camel.apache.org/resequencer.html

在您的特定情况下,您所需要做的就是向TIBCO EMS的传出消息添加一个定制的消息头,比如myMessageNo,它有一个指定顺序的序列号。然后,在消费者端,使用resequencer EIP恢复来自TIBCO EMS的传入消息的排序。

然而,正如您所看到的,这并不像将重定序器EIP放到您的Camel路由上那么简单。(任何异步解决方案都很难正确构建。)对于重定序器,您需要考虑何时发生悲伤路径,例如,当一些消息丢失且从未到达时。为了确保您的路由即使在这些异常情况下也能正常工作,您需要从两个选项中进行选择:最大批处理大小或超时。根据选择的条件,当批处理达到最大大小时或等待丢失消息超时时,重定序器将刷新消息。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46489362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档