通过排队顺序消息序号

时间:2014-07-02 14:57:47

标签: multithreading message-queue ibm-mq

我的应用程序(基于.NET)以多线程方式从队列中获取消息,我担心我可能会以无序方式接收消息,因为一个线程可能比另一个线程更快例如,给定以下队列状态:

[讯息5 |消息-4 |消息-3 |消息-2 |消息-1]

在多线程操作中, msg#2 可能会在 msg#1 之前到达,即使 msg#1 是队列中的第一个,由于许多线程问题(线程时间片,线程调度等)。

在这种情况下,如果队列中的消息在排队时已经标记了序号/序号,那将是很好的,即使我以乱序的方式收到消息,我仍然可以使用给定的ordinal-number属性在我的应用程序中的某个时刻对它们进行排序。

Websphere MQ 环境中实现它的任何已知机制?

3 个答案:

答案 0 :(得分:2)

如果将消息放入消息组中的队列,则可以从MQMessage获取MessageSequenceNumber。 MessageSquenceNumber将是消息默认放入队列的顺序,或者是将消息放入队列的应用程序定义的顺序。

有关详细信息,请参阅MessageSequenceNumber here

答案 1 :(得分:2)

您有两个选择:

(1)在MQ中使用消息分组作为whitfiea或

(2)将您的应用程序更改为单线程。

注意:如果发送应用程序未设置MQMD MsgId字段,则队列管理器将生成唯一编号(基于队列管理器名称,日期和时间)并将其存储在消息的MQMD MsgID字段中

答案 2 :(得分:0)

是的,如果原始邮件有序数,那么当您收到数据时,您可以:

使用线程安全字典:

SortedDictionary<int,Message>