2016-05-21 2 views
1

Раньше я использовал RabbitMQ в качестве платформы обмена сообщениями, и у меня никогда не было никаких проблем с этим - к сожалению, мы недавно перевели нашу инфраструктуру на Azure, t обеспечивают серверы RabbitMQ, поэтому я подумал о попытке расширения служебной шины.C# Service Bus несколько слушателей получают одно и то же сообщение (BrokeredMessage)

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

Что я хочу, это то, что все читатели получают то же сообщение и обрабатывают его сами.

Читатель (ы):

string connectionKey = "...."; 
     this.client = QueueClient.CreateFromConnectionString(connectionKey, "dev"); 
     this.client.OnMessage((message) => 
     { 
      try 
      { 
       Console.WriteLine("Message received: " + message.GetBody<string>()); 
       Console.WriteLine("Message ID: " + message.MessageId); 
       // message.Complete(); 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine("Exception " + e.Message); 
      } 
     }); 

Автор:

Console.WriteLine("Sending message " + message); 
     BrokeredMessage msg = new BrokeredMessage(message); 
     this.client.Send(msg); 

Я искал решение в течение двух часов и не смогли найти ничего. В RabbitMQ это будет поведение по умолчанию.

Image showing pattern of what I have vs. what I need

ответ

3

Azure Service Bus поддерживает несколько парадигм, один из которых называется "Темы":

How to use Service Bus topics and subscriptions

В отличие от Service Bus очереди, в которой каждое сообщение обрабатывается один потребитель, темы и подписки предоставляют форму общения «один ко многим», используя шаблон публикации/подписки.

Ссылка выше демонстрирует основные темы концепций, а также образцы кода.

+0

Кажется, мой код работает, если я использую 1 подписку для каждого слушателя. Это верно? Итак, если у меня будет 100 000 пользователей, у меня будет 100 000 подписчиков? – TheWalkingPanda

+0

@ TheWalkingPanda Что вы считаете читателем, зависит от вас. Существуют и другие технологии, которые могут помочь вам, если вы ищете способ сделать трансляцию. Одним из них является SignalR. Вы знакомы с тем, как это работает? Теоретически вы можете вывести сообщение из очереди или темы и использовать SignalR для трансляции этого сообщения для всех или для определенной группы подключенных пользователей. Если ваши пользователи являются мобильными пользователями, вы можете пойти также с Azure Notification Hub и настраиваемыми тегами. –

+0

Я читал о SignalR, ища решение. Моя настройка не требует большого количества подключенных потребителей, мне просто интересно, есть ли у вас несколько подписчиков, как работают темы, или если я что-то делаю неправильно. Темы Nevermind подходят для меня;) – TheWalkingPanda