从MSMQ优先获取消息

时间:2009-08-21 07:10:22

标签: .net msmq priority-queue

我通过设置优先级在MSMQ中发送消息。使用C#

我可以先从MSMQ获得具有高优先级的消息吗?

就像我们进入Priority Queue一样。

还有一件事......

假设有三个优先级

0 - 高 1-中等 2 - 低

队列中的序列是2001122221111100

现在如果我发送具有高优先级的消息(0)将被放置?通过在MSMQ中设置优先级。它会像真正的优先级队列一样吗?

1 个答案:

答案 0 :(得分:12)

MSMQ确实支持消息的优先级排队,但是在出列时按照到达顺序处理相同优先级的消息。例如,如果您发送3条消息,优先级7中的两条和优先级0中的一条,则接收到的优先级为7的第一条消息将出列,然后是接收到的第二条优先级为7的消息,最后是消息优先级0.您不必执行任何特殊操作以按优先级顺序处理排队的消息...但是请注意,任何给定优先级的“最旧”消息将在具有相同优先级的“最新”消息之前出列。还应该指出的是,任何交易消息都忽略了它们的优先权,即IIRC。

编辑:

虽然MSMQ支持优先级,但它的行为与优先级队列不完全相同。两者是不同的算法,MSMQ要复杂得多。当您设置消息的优先级时,不仅 help 确定该消息将被出列的顺序,它还会影响该消息通过发送者/通过MSMQ服务传播的优先级发布者到接收者/订阅者。假设您使用三个最低优先级(MSMQ支持8个优先级,从0(最低)到7(最高)),可能会出现以下情况:

0 =低,1 =中等,2 =高

发件人在指定时间(分钟:秒)发送具有给定优先级的消息:

0 @ 1:00  
2 @ 1:00
0 @ 1:01
1 @ 1:02
1 @ 1:03
0 @ 2:01
2 @ 2:01

Receiver按以下顺序对队列中的消息进行排队(假设没有消息出列):

2 @ 1:00
2 @ 2:01
1 @ 1:02
1 @ 1:03
0 @ 1:00
0 @ 1:01
0 @ 2:01

当您处理来自接收方队列的消息时,它们将按优先级顺序和接收时间进行处理。