gpt4 book ai didi

.Net Core 中的 Azure 服务总线 - 如何仅接收一条消息

转载 作者:行者123 更新时间:2023-12-01 23:27:56 26 4
gpt4 key购买 nike

我想在 .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

关于.Net Core 中的 Azure 服务总线 - 如何仅接收一条消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50438466/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com