Сервисная шина Microsoft - получение сообщений от шины с помощью метода OnMessage () - PullRequest
0 голосов
/ 23 ноября 2018

Мое приложение должно получать сообщение каждый раз, когда публикуется новое сообщение.Поэтому я использую метод OnMessage(), упомянутый в документации Microsoft.

Когда публикуются новые сообщения, метод OnMessage() не работает.Чтобы решить эту проблему, я поместил код в отдельную задачу с бесконечным циклом.Это кажется совершенно неправильным.

public void ReceiveMessageFromSubscription(string topicName, string subscriptioName)
{
    Task.Factory.StartNew(() =>
    {
        while (true)
        {
            SubscriptionClient Client = SubscriptionClient.CreateFromConnectionString(connectionString, topicName, subscriptionName);

            Client.OnMessage((message) =>
            {
                try
                {
                    var message = brokerMessage.GetBody<MessageDto>();
                    newMessage.AnnounceNewMessage(message);
                    message.Complete();
                }
                catch (Exception ex)
                {
                    message.Abandon();
                }
            });
        }
    });
}

Когда в подписке есть сообщение, должен вызываться метод OnMessage().Может кто-нибудь, пожалуйста, помогите мне с этим.

1 Ответ

0 голосов
/ 23 ноября 2018

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

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

Кроме того, я настоятельно рекомендую не использовать устаревший клиент WindowsAzure.ServiceBus , которыйвы используетеВместо этого предпочтите новый Microsoft.Azure.ServiceBus клиент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...