我目前正在开发一个使用异步处理分配的系统。信息的传输是使用队列完成的。因此,一个进程将信息放入队列(并终止),另一个进程将获取并处理它。我的实现让我面临许多挑战,我对每个人解决这些问题的方法很感兴趣(在架构和库方面)。
让我画画。假设您有三个进程:
Process A -----> Process B
|
Process C <-----------|
因此,进程 A 将消息放入队列并结束,进程 B 拾取消息,对其进行处理并将其放入“返回”队列。 进程 C 获取消息并对其进行处理。
- 如何处理 进程 B 不监听或处理队列外的消息?是否有一些 JMS 类型的方法可以阻止生产者在消费者不活动时提交消息?因此,进程 A 将提交但抛出异常。
- 假设 进程 C 必须在 X 分钟内得到回复,但 进程 B 已停止(出于任何原因),是否有某种机制强制超时在队列上?因此保证在 X 分钟内回复,这将启动流程 C。
是否可以使用某种死信队列来处理所有这些问题?我是否应该使用计时器手动执行此操作并进行检查。我已经提到了 JMS,但我对任何事情都持开放态度,事实上我正在为队列使用 Hazelcast。
请注意,就可用的 Java 技术和方法而言,这更像是一个架构问题,我确实认为这是一个恰当的问题。
如有任何建议,我们将不胜感激。
谢谢
最佳答案
恕我直言,最简单的解决方案是使用 ExecutorService,或基于执行程序服务的解决方案。这支持工作队列、计划任务(用于超时)。
它也可以在单个进程中工作。 (我相信 Hazelcast 支持分布式 ExecutorService)
关于Java 异步处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9124691/