Java 异步处理

标签 java architecture asynchronous hazelcast

我目前正在开发一个使用异步处理分配的系统。信息的传输是使用队列完成的。因此,一个进程将信息放入队列(并终止),另一个进程将获取并处理它。我的实现让我面临许多挑战,我对每个人解决这些问题的方法很感兴趣(在架构和库方面)。

让我画画。假设您有三个进程:

Process A -----> Process B
                      |
Process C <-----------|

因此,进程 A 将消息放入队列并结束,进程 B 拾取消息,对其进行处理并将其放入“返回”队列。 进程 C 获取消息并对其进行处理。

  1. 如何处理 进程 B 不监听或处理队列外的消息?是否有一些 JMS 类型的方法可以阻止生产者在消费者不活动时提交消息?因此,进程 A 将提交但抛出异常。
  2. 假设 进程 C 必须在 X 分钟内得到回复,但 进程 B 已停止(出于任何原因),是否有某种机制强制超时在队列上?因此保证在 X 分钟内回复,这将启动流程 C

是否可以使用某种死信队列来处理所有这些问题?我是否应该使用计时器手动执行此操作并进行检查。我已经提到了 JMS,但我对任何事情都持开放态度,事实上我正在为队列使用 Hazelcast。

请注意,就可用的 Java 技术和方法而言,这更像是一个架构问题,我确实认为这是一个恰当的问题。

如有任何建议,我们将不胜感激。

谢谢

最佳答案

恕我直言,最简单的解决方案是使用 ExecutorService,或基于执行程序服务的解决方案。这支持工作队列、计划任务(用于超时)。

它也可以在单个进程中工作。 (我相信 Hazelcast 支持分布式 ExecutorService)

关于Java 异步处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9124691/

相关文章:

architecture - 在整洁架构中设计实体的最佳实践是什么?

java - 虚荣/花哨/重写 URL 实现并不糟糕

c# - Autofac:注册异步工厂方法

java - 委托(delegate)给线程,同时保持线性可读性

java - CXF服务客户端中的"IOException: Strange I/O stream"

java - 新线程卡住应用

java - 天基建筑?

java - Spring @RestController 调用大量请求

java - 如何使用相同类型的对象创建对象

java - 使用基于spring注解的配置时如何配置MappingJacksonHttpMessageConverter?