Azure Service Bus的"ReceiveAsync"

5
使用Microsoft.Azure.ServiceBus包,有没有一种方法可以在当前线程上等待从队列接收消息?可能更多的是我理解上的问题和希望以一种技术不打算使用的方式使用技术,但我想做的是将以下 Microsoft 示例 中的发送和接收示例结合起来,以便您可以向各个队列发送消息,并能够侦听并处理“回复”(即您正在队列上侦听的消息),并在完成接收消息时关闭连接。以下是一些伪代码:
   // send message(s) that will be consumed by other processes / applications, and by doing so later on we will expect some messages back
   await SendMessagesAsync(numberOfMessages);

    var receivedMessages = 0;
    while (receivedMessages < numberOfMessages)
    {
        // there is no "ReceiveAsync" method, this is what I would be looking for
        Message message = await queueClient.ReceiveAsync(TimeSpan.FromSeconds(30));
        receivedMessages++;

        // do something with the message here
   }

   await queueClient.CloseAsync();

这个可能吗,还是我"做错了"?


ReceiveAsync方法在https://www.nuget.org/packages/WindowsAzure.ServiceBus/4.1.9中可用,但在https://www.nuget.org/packages/Microsoft.Azure.ServiceBus/中不可用。因此,在这里,您可以使用第一个包,或编写逻辑使“Recieve”成为阻塞的。 - user1672994
2个回答

8

哪一个建议用于Azure Functions?您的答案还是下面的ReceiveOrProcessMessagesAsync答案?请指导? - Neo
Azure Functions 服务总线触发器会为您处理消息接收,因此您不需要使用这些内容。或者您没有使用触发器吗? - Mikhail Shilkov

1
Microsoft.Azure.ServiceBus库中,不存在ReceiveAsync。相反,您可以使用RegisterOnMessageHandlerAndReceiveMessages()来处理或接收消息。使用此方法,您可以通过事件接收消息。例如:queueClient.RegisterMessageHandler(ReceiveOrProcessMessagesAsync, messageHandlerOptions);,您需要单独创建用于接收消息的事件,在我们的情况下是ReceiveOrProcessMessagesAsync。请注意保留HTML标签。
static async Task ReceiveOrProcessMessagesAsync(Message message, CancellationToken token)
    {
        // Process the message
        Console.WriteLine($"Received message: SequenceNumber:{message.SystemProperties.SequenceNumber} Body:{Encoding.UTF8.GetString(message.Body)}");

        // Complete the message so that it is not received again.
        // This can be done only if the queueClient is created in ReceiveMode.PeekLock mode (which is default).
        await queueClient.CompleteAsync(message.SystemProperties.LockToken);

        // Note: Use the cancellationToken passed as necessary to determine if the queueClient has already been closed.
        // If queueClient has already been Closed, you may chose to not call CompleteAsync() or AbandonAsync() etc. calls 
       // to avoid unnecessary exceptions.
    }

您可以访问以下链接了解有关Microsoft.Azure.ServiceBus的信息https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-dotnet-get-started-with-queues


哪一个是推荐用于Azure Functions的?您的答案还是下面的ReceiveOrProcessMessagesAsync答案?请指导? - Neo
1
你想获取 Azure 函数的调用日志吗? - Nishanth Prabhakaran
1
对于 Azure Functions,请安装 Microsoft.NET.Sdk.Functions。该软件包包含在 Azure Functions 上执行所需的所有必要内容。 - Nishanth Prabhakaran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接