Служебная шина Azure - подписчики могут независимо подписаться на подписку и поделиться одним и тем же сообщением?

Я новичок в служебной шине Azure и создал успешные документы для создания темы и отдельного приложения-подписчика для получения сообщения.

На основе этой статьи я цитирую: «С темой может быть связано до 2000 подписок, каждая из которых получает независимые копии всех сообщений, отправленных в тему. Один или несколько подписчиков могут независимо подписаться на подписку и < strong> конкурировать за сообщения от него "

http://convective.wordpress.com/2011/06/08/windows-azure-appfabric-service-bus-queues-and-topics/

Что мне интересно сделать, так это расширить это, чтобы несколько приложений независимо подписывались на одну и ту же тему, но не конкурировали за них.

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

У меня вопрос: могут ли несколько независимых приложений получать одно и то же тематическое сообщение? Любой совет будет очень признателен!


person Heretix    schedule 18.01.2014    source источник


Ответы (2)


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

Я приведу пример колледжа. Тема - «Новый студент», и каждое отделение в колледже хочет получить копию сообщения для нового студента. Таким образом, у каждого отдела будет своя собственная подписка. Были бы подписки на «Музыка», «Биллингс», «Наука», «Математика» и т. Д. Каждый из них подписывался на тему «Новый студент». Таким образом, каждый отдел получает копию нового сообщения студента или даже может фильтровать то, что им интересно. Если отдел отстает в их обработке, он может развернуть больше экземпляров процессора, используя имя своей подписки, тем самым теоретически увеличивая пропускную способность, поскольку в этом случае больше потребителей конкурируют за сообщения в своей подписке.

Итак, в вашем примере каждому приложению нужно будет либо создать свою собственную подписку, либо ему будет назначена уникальная подписка, с которой можно будет получать данные при запуске. Обратите внимание, что если вы позволяете времени жизни приложения определять время жизни подписки (то есть вы создаете подписку при запуске приложения и уничтожаете ее при закрытии приложения), вам необходимо знать, что если нет активных подписок, то сообщения, отправленные в тему просто пропадет. Однако вы можете создать подписку для всех, которая будет получать только сообщения, которые не доставляются ни в одну другую подписку. Это действительно зависит от того, чего вы пытаетесь достичь.

person MikeWo    schedule 18.01.2014
comment
Привет MikeWo, Спасибо за объяснение. - person Heretix; 19.01.2014
comment
@mikewo, когда вы говорите, что если нет активных подписок, то сообщения, отправленные в тему, будут просто потеряны, разве это не зависит от времени жизни сообщения? Даже если нет активных подписок и в тему добавлено сообщение, что, если приложение подписывается на эту тему до истечения срока действия сообщения? Не получит ли он это? Спасибо за сообщение. Это очень полезно. - person Noel Abrahams; 13.05.2016
comment
@NoelAbrahams Нет. Если нет подписок и в тему отправлено сообщение, система считает, что никому нет дела, и не сохраняет сообщение. Срок действия сообщения истекает, когда оно доставляется в очередь / подписку, которая заботится. Время по умолчанию для сообщения для очереди или темы - Timespan.MaxValue, поэтому теоретически, если бы все работало так, как вы спрашиваете, они всегда будут рядом, пока кто-нибудь на них не подпишется. - person MikeWo; 17.05.2016

Вам нужна не служебная шина, а концентратор событий. Концентратор событий работает именно так, как вы описали, и к нему также можно получить доступ с помощью AMQP.

person Gábor Paller    schedule 13.03.2018
comment
Это не дает ответа на вопрос. Как только у вас будет достаточная репутация, вы сможете комментировать любой пост; вместо этого предоставит ответы которые не требуют пояснений от автора вопроса. - Из отзыва - person Gilles Gouaillardet; 14.03.2018
comment
Я не понимаю комментарий рецензента. У меня была точно такая же проблема, как указано в вопросе, и я решил ее, как описал в своем ответе. У меня есть код для подтверждения, если вам интересно. Являетесь ли вы экспертом в области служебной шины или концентратора событий и так неожиданно отказываетесь от должным образом проработанного ответа? - person Gábor Paller; 14.03.2018
comment
Формат неправильный, imho, и, вероятно, поэтому он был отмечен как пост низкого качества. Это либо (хороший) комментарий, либо ответ только по ссылке, но без ссылки, и ни один из них не подходит в качестве ответа на SO. Обзор не об опыте, а о голосовании за и против. - person Gilles Gouaillardet; 14.03.2018
comment
Мне очень жаль, но ты полностью потерял меня. Формат моего поста? По какой ссылке только ответ? Какой голос за или против? Я этого не делал. Я получил этот вопрос от Google, и у меня была та же проблема, что и у пользователя, задавшего вопрос. Мне потребовалось некоторое время, чтобы понять, что эту очень частую проблему сложно решить с помощью служебной шины, но гораздо проще решить с помощью концентратора событий, и я поделился своим мнением, которое я фактически реализовал в нашем продукте. Потом я продолжал получать эти шаблонные комментарии (это не в первый раз), которые, честно говоря, действительно озадачивали меня. - person Gábor Paller; 14.03.2018
comment
Формат неправильный, ваш ответ не демонстрирует, как Event Hub решает проблему, и вы даже не предоставили ссылку. Вы просто не можете ожидать, что ТАК читатели поверит вам на слово, и, вероятно, именно поэтому ваш пост не получил поддержки. Короче говоря, когда у вас есть мнение, нажмите на комментарий, а когда у вас есть факты, нажмите на ответ. В основном так работает SO, но не принимайте мои слова за евангелие, а вместо этого совершите экскурсию, - person Gilles Gouaillardet; 17.03.2018