我目前正在开发一个使用异步处理分配的系统。信息的传输使用队列完成。因此,一个进程将在队列中放置信息(并终止),而另一个进程将获取并处理它。我的实现给我带来了许多挑战,我对每个人解决这些问题的方法都很感兴趣(在架构和库方面)。
让我来画这幅画。假设您有三个过程:
Process A -----> Process B
|
Process C <-----------|因此,Process A将消息放入队列并结束,Process B接收消息,并将其处理为“返回”队列。Process C接收消息并处理它。
进程
所有这些问题都能用某种死信队列来处理吗?我是不是应该用计时器和检查手动完成这些。我已经提到了JMS,但是我对任何事情都是开放的,事实上,我使用Hazelcast作为队列。
请注意,就可用的java技术和方法而言,这更像是一个架构问题,我确实认为这是一个恰当的问题。
如有任何建议,将不胜感激。
谢谢
发布于 2012-02-03 11:10:15
IMHO,最简单的解决方案是使用ExecutorService或基于执行器服务的解决方案。这支持工作队列,计划的任务(用于超时)。
它也可以在一个单一的过程中工作。(我相信Hazelcast支持分布式ExecutorService)
发布于 2012-02-03 06:53:56
在我看来,您提出的问题类型是“气味”,队列和异步处理可能不是解决您的情况的最佳工具。
1)这违背了排队的目的。听起来你需要一个同步的请求-响应过程。
( 2)从一般意义上讲,C过程没有得到答复。这是从队列中得到的消息。如果队列中有一条消息,并且进程C已经准备好,那么它将得到它。例如,进程C可以确定消息一旦收到就会失效。
发布于 2012-02-03 07:47:17
我认为其他海报已经充分回答了你的第一个问题。
关于第二个问题,根据应用程序使用的消息传递引擎,您想要做的事情可能是可能的。我知道这适用于IBM。我看到这是使用WebSphere MQ类为Java完成的,而不是JMS。它的工作方式是,当进程A将消息放入队列时,它指定等待响应消息的时间。如果进程无法在指定的时间内接收响应消息,系统将抛出适当的异常。
我不认为JMS中有一种标准的方法来以您想要的方式处理请求/响应超时,所以您可能不得不使用特定于平台的类,比如Java类。
https://stackoverflow.com/questions/9124691
复制相似问题