我可以使用多个发布者和单个接收者在OpenMQ上保留消息顺序吗?

时间:2011-08-11 18:07:24

标签: java glassfish jms message-queue openmq

我想使用GlassFish中的OpenMQ进行记录。我认为我的组件可以将消息放在此队列上,如果只有一个mdb消耗它,我应该能够按照它们排队的顺序接收所有消息。这会起作用吗? 可以保留消息顺序吗?

仅供参考,演示文稿中有一张幻灯片,最初让我相信JMS提供了一个订单,显然这是误导。

  

幻灯片8的成绩单:

     

什么是JMS? •面向消息的中间件的基于Java的api。 •它   使用以下概念(以及其他)> 消息顺序是   保证>消息的可靠性级别确定   已发送>事务(要发送或生成的消息的分组   在一起)支持>消息的格式由   生产者>提供两种消息传递方式(点对点和   发布 - 订阅)版权所有Sun Microsystems Inc.版权所有   保留。 [8]

     

http://www.slideshare.net/alexismp/openmq-aquarium-paris-presentation

以下这些答案表明JMS结构不保证订单。但我在想如果我只有一个MDB,即使用容器并发的单例,那么我至少可以享受一个排队顺序。

请参阅:

1 个答案:

答案 0 :(得分:1)

我不担心确保Queue本身的顺序。只需在消息有效负载中包含一个时间戳字段,然后对该事件进行排序。当在极高流量条件下额外数据不可接受时,这只会成为一个问题,但在这些情况下,无论如何都可能暂时恢复到本地日志记录。

拥有附加字段还可以确保如果某个组件失去与Queue的连接,那么用于提前一小时传递的消息仍然具有正确的时间和“订单”,当它们进入消费MDB时。 / p>