如何使用单向消息交换模式维护从VM到JMS的骡流中处理的消息的顺序?

时间:2015-02-27 07:12:52

标签: jms mule virtual-machine esb mule-studio

我正在将Anyles studio的mulesoft ESB用于项目。在我的一个流程中,我使用单向消息交换模式从VM(持久性文件存储VM连接器)调度到JMS,启用xa事务以避免丢失消息。

考虑每当用户将他/她的姓氏更新为ESB时我们发送消息的场景。例如,假设用户将姓氏更改为“A”,但很快就会更改为“B”,因此最终结果应为“B”。

1)在我的情况下,消息'A'之前是否可能处理消息'B'?因此姓氏设置为'A'而不是'B'?

2)除了使用“请求 - 响应”MEP之外,我该如何避免这种情况?

3)有没有办法编写单元测试,以确保正在处理的消息的顺序是从VM(单向,xa启用)维护到JMS(单向,xa启用)?

4)我如何手动测试?

提前谢谢你。任何指针/帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

这不太可能,因为您的系统通常会比用户提交请求更快地做出反应。但是,在负载峰值期间可能就是这种情况。

要真正确保消息顺序,您的解决方案中确实需要一个瓶颈(单个实例/线程)来处理所有请求。也就是说,您需要确保Mule中的处理策略是同步的,并且您在VM队列中只有一个使用者。如果您使用多个Mule服务器进行HA设置,则可能会使消息无序。在这种情况下,如果用户最初使用HTTP进行连接,您可以使用带有粘性会话策略的负载均衡器解决大部分问题。

可能更强大和可扩展的解决方案是确保用户以高分辨率在每个请求上提交它的本地时间戳。然后,您可以确保在将信息存储到数据库时丢弃任何“过时”更新。但是,这不是在mule VM / JMS层中,而是在数据库中。

对于可测试性 - 不,我认为没有一种真正令人满意的方式可以100%确保消息在任何情况下都不会出现故障,只需编写集成测试或执行手动测试。您需要在理论上验证消息路径,以确保没有一个消息可以绕过另一个消息的部分。