Несколько прослушивателей Azure ServiceBus на одном компьютере не работают

Я использую Azure ServiceBus для обработки элементов, отправленных несколькими клиентами.

Я тестирую часть, которая получает эти сообщения, и запускаю 2 слушателя рядом. Однако, если я отправлю 2 элемента в очередь. Всегда работает только 1 прослушиватель, а второй не принимает другой элемент.

Однако я попытался запустить 2 прослушивателя на разных машинах, и они оба обрабатывают 2 элемента, помещенных в очередь.

Является ли проблема запуском нескольких слушателей на одном компьютере, и если да, то что я делаю неправильно и как это исправить?

Спасибо за ваше время.

Дэн


person Danhol86    schedule 05.05.2017    source источник
comment
Непонятно, чего вы хотите - вы хотите, чтобы они оба получали все сообщения? Если да, то следует использовать тему с 2-мя подписками.   -  person snow_FFFFFF    schedule 05.05.2017
comment
Извинения. Нет, я хочу, чтобы они оба взяли следующий предмет в очереди. Однако только 1 из 2 слушателей когда-либо берет по одной за раз. Если я запускаю 2 прослушивателя на 2 машинах, все работает так, как я хочу. Однако, когда 2 слушателя находятся на одной машине, они оба не принимают разные сообщения одновременно.   -  person Danhol86    schedule 05.05.2017


Ответы (1)


Проблема с запуском нескольких слушателей на одном компьютере

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

Вызов метода OnMessage:

var client = QueueClient.CreateFromConnectionString(connectionString, queueName);

var options = new OnMessageOptions();
options.AutoComplete = false;

client.OnMessage(mes =>
{
    Console.WriteLine(mes.GetBody<string>());
}, options);

Вывод:

введите здесь описание изображения

Способ приема вызова:

var client = QueueClient.CreateFromConnectionString(connectionString, queueName);  

BrokeredMessage mes = client.Receive();
Console.WriteLine(mes.GetBody<string>());

Вывод:

введите здесь описание изображения

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

person Fei Han    schedule 11.05.2017