在Azure服务总线订阅中未触发ProcessMessagesAsync方法

时间:2020-04-17 06:45:55

标签: azure azureservicebus azure-servicebus-subscriptions

我正在使用Azure服务总线在两个.Net核心Web API应用程序之间进行消息传递。 通过使用topicClient,我可以将消息发送到ABS。 但是,在使用订阅客户端接收消息时,我遇到了这个问题。

ProcessMessagesAsync-在我提供“ Console.Read();”之前不会触发方法。。我不能使用此功能,因为我正在使用Web API。

我还能如何触发此ProcessMessagesAsync方法-完美读取我的消息。

谢谢。

    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 个答案:

答案 0 :(得分:1)

这是一个循环,其运行过程与进程一起运行。进程结束后,处理程序将终止。

如果您有连续的消息流,那么处理程序(即消息泵)是一个合适的选项。如果您只需要接收一条消息并退出,则可以使用消息MessageReceiver.ReceiveAsync的阻止选项。您可以在关闭时控制该应用。

$pageid = 2551;
$url = 'https://de.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=json&pageids='.$pageid;
$content = file_get_contents($url);
$content = json_decode($content, TRUE);
$content = $content['query']['pages'][$pageid]['revisions'][0]['*'];
$anfang = 'KURZBESCHREIBUNG=';
$ende = '\\n';
if(preg_match('%'.$anfang.'(.*)'.$ende.'%isU', $content, $match)) { $beschreibung_kurz = trim($match[1]); }

有关更多详细信息,您可以参考此article