作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在 .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;
关于.Net Core 中的 Azure 服务总线 - 如何仅接收一条消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50438466/
我是一名优秀的程序员,十分优秀!