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