首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java异步处理

Java异步处理
EN

Stack Overflow用户
提问于 2012-02-03 06:40:26
回答 6查看 1.3K关注 0票数 2

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

让我来画这幅画。假设您有三个过程:

代码语言:javascript
复制
Process A -----> Process B
                      |
Process C <-----------|

因此,Process A将消息放入队列并结束,Process B接收消息,并将其处理为“返回”队列。Process C接收消息并处理它。

  1. 如何处理进程B、没有侦听或处理队列中的消息?是否有某种JMS类型的方法可以阻止生产者在使用者未活动时提交消息?因此,exception.
  2. Lets进程A将提交但是抛出一个进程C必须在X分钟内得到答复,但是进程B已经停止(由于任何原因),是否有机制强制队列超时?所以保证在X分钟内回复,这将启动C.

进程

所有这些问题都能用某种死信队列来处理吗?我是不是应该用计时器和检查手动完成这些。我已经提到了JMS,但是我对任何事情都是开放的,事实上,我使用Hazelcast作为队列。

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

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

谢谢

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-02-03 11:10:15

IMHO,最简单的解决方案是使用ExecutorService或基于执行器服务的解决方案。这支持工作队列,计划的任务(用于超时)。

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

票数 2
EN

Stack Overflow用户

发布于 2012-02-03 06:53:56

在我看来,您提出的问题类型是“气味”,队列和异步处理可能不是解决您的情况的最佳工具。

1)这违背了排队的目的。听起来你需要一个同步的请求-响应过程。

( 2)从一般意义上讲,C过程没有得到答复。这是从队列中得到的消息。如果队列中有一条消息,并且进程C已经准备好,那么它将得到它。例如,进程C可以确定消息一旦收到就会失效。

票数 2
EN

Stack Overflow用户

发布于 2012-02-03 07:47:17

我认为其他海报已经充分回答了你的第一个问题。

关于第二个问题,根据应用程序使用的消息传递引擎,您想要做的事情可能是可能的。我知道这适用于IBM。我看到这是使用WebSphere MQ类为Java完成的,而不是JMS。它的工作方式是,当进程A将消息放入队列时,它指定等待响应消息的时间。如果进程无法在指定的时间内接收响应消息,系统将抛出适当的异常。

我不认为JMS中有一种标准的方法来以您想要的方式处理请求/响应超时,所以您可能不得不使用特定于平台的类,比如Java类。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9124691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档