8

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

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

就像我们进入优先队列一样。

还有一件事..

假设有三个优先级

0 - 高 1 - 中 2 - 低

队列中的序列是 2001122221111100

现在,如果我发送具有高优先级(0)的消息,它将被放置在哪里?通过在 MSMQ 中设置优先级。它会表现得像实际的优先队列吗?

4

1 回答 1

12

MSMQ 确实支持消息的优先级排队,但是相同优先级的消息在出队时按到达顺序进行处理。例如,如果您发送 3 条消息,其中两条优先级为 7,一条优先级为 0,那么收到的第一个优先级为 7 的消息将出队,然后是收到的第二个优先级为 7 的消息,最后是优先级 0。您不必做任何特殊的事情来按优先级顺序处理排队的消息……但是请注意,任何给定优先级的“最旧”消息将在具有相同优先级的“最新”消息之前出列。还应该注意的是,任何事务性消息都会忽略其优先级 IIRC。

编辑:

虽然 MSMQ 支持优先级,但它的行为与优先级队列不同。这两种是不同的算法,MSMQ 要复杂得多。设置消息的优先级时,这不仅有助于确定消息出列的顺序,还会影响消息通过 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

接收方按以下顺序在其队列中排队消息(假设没有消息出队):

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

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

于 2009-08-21T07:15:26.840 回答