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

如何使用单向消息交换模式维护从VM到JMS的mule流中正在处理的消息的顺序?,jms,mule,virtual-machine,esb,mule-studio,Jms,Mule,Virtual Machine,Esb,Mule Studio,我正在将mulesoft ESB与Anypoint studio一起用于一个项目。在我的一个流中,我使用单向消息交换模式从VM(持久性文件存储VM连接器)分派到JMS,这两种模式都启用了xa事务以避免丢失消息 考虑这样一个场景:每次用户将其姓氏更新到ESB时,我们都会发送一条消息。例如,假设用户将姓氏更改为“A”,但很快更改为“B”,所以最终结果预计为“B” 1) 在我的案例中,消息“B”是否可能在消息“A”之前得到处理?因此,姓氏被设置为“A”而不是“B” 2) 除了使用“请求-响应”MEP,

我正在将mulesoft ESB与Anypoint studio一起用于一个项目。在我的一个流中,我使用单向消息交换模式从VM(持久性文件存储VM连接器)分派到JMS,这两种模式都启用了xa事务以避免丢失消息

考虑这样一个场景:每次用户将其姓氏更新到ESB时,我们都会发送一条消息。例如,假设用户将姓氏更改为“A”,但很快更改为“B”,所以最终结果预计为“B”

1) 在我的案例中,消息“B”是否可能在消息“A”之前得到处理?因此,姓氏被设置为“A”而不是“B”

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

3) 是否有一种编写单元测试的方法来确保处理的消息的顺序从VM(单向,启用xa)保持到JMS(单向,启用xa)

4) 我如何进行手动测试


先谢谢你。任何提示/帮助都将不胜感激。

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

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

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


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

我假设您将在prod(HA)中运行多个Mule实例,因此在分布式场景中,此问题将变得更加棘手。你在用Mule EE吗?我在问,所以我们知道你是否可以使用Mule集群。Dav,我没有使用Mule EE。此外,目前我们不会在prod中运行多个Mule实例。