可靠的FIFO消息传递Java

3
我希望扩展一个小型中间件系统,以添加可靠的FIFO通信,为此,代理之间的连接需要是FIFO。目前,中间件的通信层支持套接字和RMI。然而,我认为套接字和RMI不能为消息对象提供FIFO排序。
有没有办法在RMI的消息对象级别上强制实施FIFO排序?
到目前为止,我得出结论,使用类似JMS的通信层可以保证FIFO排序。这有意义吗?还是有其他轻量级的替代方案?
我认为另一种选择是使用消息编号,并通过在套接字或RMI上编写一个小协议来实现此排序,但这似乎需要大量工作并需要处理特殊情况的专业知识。

1
我正在询问在Java中实现可靠消息传递的可能方法,而不是特定的产品!我的问题是是否可以使用像JMS这样的消息传递API,或者是否有其他替代方法/技术,而不是产品! - p00ya00
然而,我认为套接字和 RMI 无法为消息对象提供FIFO排序。为什么呢? - user207421
1个回答

2
有几个开源消息系统可供使用,例如RabbitMQActiveMQZeroMQHornetQ。一旦设置完成,它们都非常容易使用。如果您只需要在线程之间通信而不是进程,则可以使用BlockingQueuePriorityBlockingQueue(我使用的大多数系统都使用RabbitMQ/ActiveMQ/ZeroMQ/HornetQ在进程之间通信,然后使用[Priority]BlockingQueue在线程之间传播消息)。

谢谢!我想在不同的机器上的每个代理之间发送消息。那么你认为使用MoM作为另一个MoM的通信层是否有意义?而且这是实现FIFO排序的唯一方式吗? - p00ya00
1
@p00ya00我认为在简单性方面,使用MoM作为另一个MoM的通信层是有意义的-您正在使用一种专门擅长于其所做的队列软件,而不必添加队列到现有软件中,从而可能引入错误,因此混合系统更可靠。(我从来没有遇到过消息系统出现错误的问题-这些问题总是来自应用程序层面。)我不知道如何使用RMI进行FIFO排序。 - Zim-Zam O'Pootertoot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接