【问题标题】:Can I preserve the message order on OpenMQ using multiple publishers and a single receiver?我可以使用多个发布者和一个接收者保留 OpenMQ 上的消息顺序吗?
【发布时间】:2011-10-25 05:37:39
【问题描述】:

我想使用来自GlassFish 的 OpenMQ 进行日志记录。我在想我的组件可以将消息放在这个队列上,如果只有一个 mdb 从中消费,我应该能够按照它们被排队的顺序接收所有消息。这会起作用吗以及如何 可以保持消息顺序吗?

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

幻灯片 8 的文字记录:

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

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

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

见:

【问题讨论】:

  • 不确定为什么要降级。我是 jms 的新手,很可能会对此回应做出决定。似乎也没有任何相同的问题。我应该修改吗?

标签: java glassfish jms message-queue openmq


【解决方案1】:

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

拥有附加字段还可以确保如果组件失去与队列的连接,则原定在一小时前交付的消息在到达消费 MDB 时仍然具有正确的时间和“顺序”。

【讨论】:

    猜你喜欢
    • 2014-10-12
    • 2012-02-19
    • 2016-02-08
    • 2011-02-10
    • 2017-12-10
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多