2013-07-08 34 views
3

我想扩展一个小型中间件系统以添加可靠的FIFO通信,并且为此,代理之间的连接需要为FIFO。目前中间件的通信层支持socket和RMI。不过,我不认为套接字和RMI可以为消息对象提供FIFO排序。可靠的FIFO消息Java

有没有在RMI的消息对象级别执行FIFO排序的方法?

到目前为止,我已经得出结论,为通信层使用类似JMS的东西来保证FIFO排序。这有意义吗?或者还有其他轻量级替代品?

我认为另一个选择是使用消息编号并通过在套接字或RMI上编写一个小协议来实现这个顺序,但它看起来像很多工作,需要一些专业知识来处理特殊情况。

+1

我正在寻求可能的方法来使用Java进行可靠的消息传递,而不是使用特殊的产品!我的问题是,是否可以使用像JMS这样的消息传递API,或者是否有其他替代方法/技术,而不是产品! – p00ya00

+0

“但是我不认为套接字和RMI可以为消息对象提供FIFO排序。”为什么不? – EJP

回答

2

有几个开源邮件系统可用,例如RabbitMQActiveMQZeroMQHornetQ - 一旦你已经得到了他们建立他们都相当容易使用。如果你只是在线程之间而不是进程之间进行通信,那么你可以使用BlockingQueuePriorityBlockingQueue(我所使用的大多数系统使用RabbitMQ/ActiveMQ/ZeroMQ/HornetQ在进程之间进行通信,然后使用[优先] BlockingQueue的)。

+0

谢谢!由于每个代理都位于不同的计算机上,因此我想在进程之间发送消息。所以你认为使用MoM作为另一个MoM的通信层是有意义的吗?这是否是实现FIFO排序的唯一方法? – p00ya00

+1

@ p00ya00我认为使用MoM作为另一个MoM的通信层在简单性方面是有意义的 - 您正在使用专门的排队软件,它擅长它的功能,而不必将排队添加到现有软件中结果引入错误的可能性,结果是混合系统更可靠。 (我从来没有遇到消息系统抛出错误的问题 - 这些总是来自应用程序层。)我不知道使用RMI执行FIFO排序的方法。 –