我的应用程序(基于.NET)以多线程方式从队列中获取消息,我担心我可能会以无序方式接收消息,因为一个线程可能比另一个线程更快例如,给定以下队列状态:
[讯息5 |消息-4 |消息-3 |消息-2 |消息-1]
在多线程操作中, msg#2 可能会在 msg#1 之前到达,即使 msg#1 是队列中的第一个,由于许多线程问题(线程时间片,线程调度等)。
在这种情况下,如果队列中的消息在排队时已经标记了序号/序号,那将是很好的,即使我以乱序的方式收到消息,我仍然可以使用给定的ordinal-number属性在我的应用程序中的某个时刻对它们进行排序。
在 Websphere MQ 环境中实现它的任何已知机制?
答案 0 :(得分:2)
如果将消息放入消息组中的队列,则可以从MQMessage获取MessageSequenceNumber
。 MessageSquenceNumber将是消息默认放入队列的顺序,或者是将消息放入队列的应用程序定义的顺序。
有关详细信息,请参阅MessageSequenceNumber
here
答案 1 :(得分:2)
您有两个选择:
(1)在MQ中使用消息分组作为whitfiea或
(2)将您的应用程序更改为单线程。
注意:如果发送应用程序未设置MQMD MsgId字段,则队列管理器将生成唯一编号(基于队列管理器名称,日期和时间)并将其存储在消息的MQMD MsgID字段中
答案 2 :(得分:0)
是的,如果原始邮件有序数,那么当您收到数据时,您可以:
使用线程安全字典:
SortedDictionary<int,Message>