Получение сообщения по приоритету от MSMQ - PullRequest
8 голосов
/ 21 августа 2009

Я отправляю сообщения в MSMQ, установив его приоритет. используя C #

Могу ли я сначала получить сообщение от MSMQ с высоким приоритетом?

точно так же, как мы попали в очередь с приоритетами.

и еще кое-что ..

предположим, что есть три уровня приоритета

0 - высокий 1 - средний 2 - низкий

последовательность в очереди 2001122221111100

теперь, если я отправлю сообщение с высоким приоритетом (0), куда оно будет помещено ?? установив приоритет в MSMQ. будет ли он вести себя как фактическая приоритетная очередь?

1 Ответ

12 голосов
/ 21 августа 2009

MSMQ поддерживает приоритетную очередь сообщений, однако сообщения с одинаковым приоритетом обрабатываются в порядке поступления при снятии с очереди. Например, если вы отправите 3 сообщения, два с приоритетом 7 и одно с приоритетом 0, то первое сообщение с приоритетом 7, которое было получено, будет удалено, после чего будет получено второе сообщение с приоритетом 7, за которым, наконец, следует сообщение. приоритет 0. Вам не нужно делать ничего особенного для обработки сообщений в очереди в порядке их приоритетов ... однако просто имейте в виду, что «самое старое» сообщение любого данного приоритета будет удалено перед самым «новым» сообщением того же приоритета. Следует также отметить, что любые транзакционные сообщения игнорируют их приоритет, IIRC.

EDIT:

Хотя 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

Получатель помещает в очередь сообщения в своей очереди в следующем порядке (при условии отсутствия сообщений в очереди):

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

Когда вы обрабатываете сообщения из очереди получателя, они будут обрабатываться как в порядке приоритета, так и в полученное время.

...