[英]Azure Service Bus in .Net Core - how to receive only one message
我想在 .Net Core 上使用 Azure 服务总线并且只阅读一条消息。 Microsoft.Azure.ServiceBus
似乎不支持这种情况。 到目前为止,测试代码让我走到了这一步:
public void ReceiveOne()
{
var queueClient = new QueueClient(ServiceBusConnectionString, "go_testing");
queueClient.RegisterMessageHandler(
async (message, token) =>
{
var messageBody = Encoding.UTF8.GetString(message.Body);
Console.WriteLine($"Received: {messageBody}, time: {DateTime.Now}");
await queueClient.CompleteAsync(message.SystemProperties.LockToken);
await queueClient.CloseAsync();
},
new MessageHandlerOptions(async args => Console.WriteLine(args.Exception))
{ MaxConcurrentCalls = 1, AutoComplete = false });
}
所以我在成功阅读一条消息后关闭队列。 它有效,但也会触发异常。
你知道更好的方法来实现它吗?
我找到了一个解决方案:
IMessageReceiver messageReceiver = new MessageReceiver(ServiceBusConnectionString, QueueName, ReceiveMode.PeekLock);
// Receive the message
Message message = await messageReceiver.ReceiveAsync();
// 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 MessageReceiver is created in ReceiveMode.PeekLock mode (which is default).
await messageReceiver.CompleteAsync(message.SystemProperties.LockToken);
await messageReceiver.CloseAsync();
您需要包括:
using Microsoft.Azure.ServiceBus;
using Microsoft.Azure.ServiceBus.Core;
这是原始来源: https : //github.com/Azure/azure-service-bus/tree/master/samples/DotNet/GettingStarted/Microsoft.Azure.ServiceBus/SendReceiveUsingMessageSenderReceiver
RegisterMessageHandler 是一个方便的 API,用于接收出现在您的队列中的所有消息。
您需要较低级别的 API queueClient.ReceiveAsync
ReceiveAsync()
异步接收消息
请参阅此示例接收循环,了解如何使用 ReceiveAsync API 接收多条消息(如果需要)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.