问题:我有一个单一的流程请求启动,可以分解为多个级别的队列/ MDB,以加快并行处理速度。问题是,了解何时完成每个级别的处理以完成结束流程的最佳方法是什么?请记住,我正在处理大量的消息,因此必须考虑性能。
技术堆栈:
解决方案1尝试:父进程轮询子进程,直到每个子级别完成为止。这意味着一个开放的MDB会话将一致地轮询每个级别的消息的响应队列,以便它的子进程完成。
优势:您可以不断调用数据库来确定“我还没完成”。
缺点:
解决方案2提案:
如何确定流程是否完整?当每条消息响应MDB时,它可以检查数据库状态表以确定它是否完整。
优势:
列出项目
所有消息都是孤立的。
缺点:这可能意味着需要多次调用数据库来确定完整性。我认为随着消息数量的增加,这将是一个主要的可扩展性问题。
我没有经常使用Spring批处理和Spring集成,但也许这就是我应该寻找解决方案的地方。希望在MDB和MQ的消息流方面有很多经验的人可以在缩放/确定过程何时完成方面给出一些指导。
答案 0 :(得分:0)
另一种解决方案是使用JMS总线让子进程在子任务完成时通知父进程。架构看起来像这样。
这样,由于子项(解决方案1)或数据库(解决方案2)的轮询,没有额外的负载。
这也允许您扩展体系结构以引入更复杂的控制机制。对于例如您可以通过将来自子项的定期进度消息发布到状态主题来监视任务的进度/确保它们都没有崩溃。