ProcessMessagesAsyn c метод не запускается в Azure подписке служебной шины - PullRequest
0 голосов
/ 17 апреля 2020

Я использую служебную шину Azure для обмена сообщениями между двумя. Net основными приложениями Web API. С помощью topicClient я могу отправить сообщение в ABS. Но, тем не менее, при использовании клиента подписки для получения сообщения я сталкиваюсь с этой проблемой.

ProcessMessagesAsyn c - метод не запускается, пока я не дам "Console.Read ();", Я не могу дать это, потому что я использую Web API.

Как еще, я могу запустить этот ProcessMessagesAsyn c метод - который отлично читает мое сообщение.

Заранее спасибо.

    public async Task GetMessageFromSubscription()
        {

        subscriptionClient = new SubscriptionClient(ServiceBusConnectionString, TopicName, SubscriptionName);

                RegisterOnMessageHandlerAndReceiveMessages();
                //  Console.Read();  ------- Without this line 

                await subscriptionClient.CloseAsync();
           }

 public void RegisterOnMessageHandlerAndReceiveMessages()
        {
            var messageHandlerOptions = new MessageHandlerOptions(ExceptionReceivedHandler);
            subscriptionClient.RegisterMessageHandler(ProcessMessagesAsync, messageHandlerOptions);
         }


        private async Task ProcessMessagesAsync(Message message, CancellationToken token)
        {
               var messageBody = Encoding.UTF8.GetString(message.Body);
                var serviceBusMessage = JsonConvert.DeserializeObject<WorkIntakeItem>(messageBody);
                await subscriptionClient.CompleteAsync(message.SystemProperties.LockToken);

         }

1 Ответ

1 голос
/ 17 апреля 2020

Это все oop, которое работает так же, как и процесс. Когда процесс завершится, обработчик будет остановлен.

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

static IMessageReceiver messageReceiver;
RegisterOnMessageHandlerAndReceiveMessages();
Message message = await messageReceiver.ReceiveAsync();
await messageReceiver.CompleteAsync(message.SystemProperties.LockToken);
await messageReceiver.CloseAsync();
await subscriptionClient.CloseAsync();

Для получения более подробной информации вы можете обратиться к этой статье .

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