Шаблон обмена сообщениями между конкурирующими потребителями в служебной шине Azure

Я только начинаю работать с служебной шиной Windows Azure (Темы и очереди) и пытаюсь реализовать шаблон обмена сообщениями для конкурирующих потребителей.

По сути, я хочу иметь набор сообщений Производители и набор сообщений Потребители. После создания сообщения я хочу, чтобы первый доступный потребитель обработал его. Никакие другие потребители не должны получать это сообщение.

Есть ли способ сделать это в Azure?


person JoeGeeky    schedule 09.04.2012    source источник
comment
Какого рода / сколько работы стоит за каждым сообщением? Какие у вас ограничения по времени?   -  person Simon Opelt    schedule 09.04.2012
comment
@Simon В идеале потребители должны начать обработку сообщения в течение 10-30 мсек после того, как сообщение было создано. Если производители опережают потребителей, я добавлю больше потребителей, чтобы удовлетворить потребности.   -  person JoeGeeky    schedule 10.04.2012


Ответы (3)


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

Вы можете эмулировать тематическую функциональность в Brokered Messaging, используя свойства Label и / или Content Type вместе с PeekLock режим приема.

person Zack    schedule 09.04.2012
comment
Означает ли это, что я просто создаю очередь? установка ReceiveMode соответствующим образом; и привязать всех потребителей к одной очереди? Это верно? - person JoeGeeky; 10.04.2012
comment
Да, это правильно. Если вы используете метод PeekLock, вы сможете проверить Label или ContentType, чтобы узнать, является ли это типом сообщения, на которое получатель хочет ответить. Если это так, просто вызовите .Complete () в сообщении, если нет, то .Abandon (). После отмены и истечения срока короткой блокировки другие потребители очереди могут обработать сообщение. Если он завершен, он навсегда удаляется из очереди. - person Zack; 10.04.2012

Простой. Просто создайте два (или более) получателя, которые одновременно получают из одной очереди, и все готово. Любое полученное сообщение отправляется ровно одному из этих получателей, поскольку курсор над журналом сообщений перемещается вперед по мере получения сообщения. Конкурирующие потребители - это неотъемлемая возможность сетевой очереди, поэтому на самом деле ничего особенного не требуется.

Если вам нужно обратное - каждое сообщение отправляется каждому потребителю - вы делаете подписку для каждого потребителя, что дает вам изолированного пользователя в журнале сообщений, который может перемещаться независимо от других получателей. Что касается удовольствия, очевидно, что у вас также могут быть конкурирующие потребители по подписке.

Клеменс

person Clemens Vasters    schedule 11.05.2012
comment
Не уверен, что понимаю, как можно привлечь конкурирующих потребителей по подписке. Будет ли это сделано с помощью фильтра? Не могли бы вы объяснить немного подробнее или указать на дополнительную информацию? - person Ryan Cromwell; 13.01.2013

Темы являются функцией обмена сообщениями через посредника, но представляют собой шаблон «публикация / подписка» по принципу «один ко многим». Очереди - это индивидуальная передача сообщений. Так что да, похоже, вам следует просто использовать очереди. См. Также http://msdn.microsoft.com/en-us/library/hh689723(VS.103).aspx.

person Seth Manheim - MSFT    schedule 20.04.2012
comment
Очереди - это индивидуальная передача сообщений в том смысле, что сообщение будет доставлено одному получателю. Однако ничто не мешает вам иметь несколько приемников, прослушивающих одну и ту же очередь одновременно, чтобы реализовать упомянутый сценарий. - person Ramiro Berrelleza; 11.05.2012