我通过设置优先级在 MSMQ 中发送消息。使用 C#
我可以先从具有高优先级的 MSMQ 获取消息吗?
就像我们进入优先队列一样。
还有一件事..
假设有三个优先级
0 - 高 1 - 中 2 - 低
队列中的序列是 2001122221111100
现在,如果我发送具有高优先级(0)的消息,它将被放置在哪里?通过在 MSMQ 中设置优先级。它会表现得像实际的优先队列吗?
我通过设置优先级在 MSMQ 中发送消息。使用 C#
我可以先从具有高优先级的 MSMQ 获取消息吗?
就像我们进入优先队列一样。
还有一件事..
假设有三个优先级
0 - 高 1 - 中 2 - 低
队列中的序列是 2001122221111100
现在,如果我发送具有高优先级(0)的消息,它将被放置在哪里?通过在 MSMQ 中设置优先级。它会表现得像实际的优先队列吗?
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
当您处理来自接收者队列的消息时,它们将按优先级顺序以及接收时间进行处理。