首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >你能直接向Azure服务巴士中的死信队列发送一条新消息吗?

你能直接向Azure服务巴士中的死信队列发送一条新消息吗?
EN

Stack Overflow用户
提问于 2021-12-06 12:06:56
回答 2查看 686关注 0票数 1

最近,我编写了一些代码,将从azure服务总线发出的死信队列消息处理为报表。

我正试图通过将大量的消息上传到死信队列中来测试该代码,以供其处理。

我组装了一个c# linqpad /控制台应用程序,该应用程序读取一个文本文件文件夹,并尝试使用Azure.Messaging.ServiceBus客户机库将每个文本文件作为消息发送给我的testqueue/$死信,如下所示:

代码语言:javascript
复制
var files = Directory.GetFiles(messagePath,filePattern);
var client = new ServiceBusClient(connectionString);
var dlqSender = client.CreateSender($"{queueName}/$deadletterqueue");

foreach (var file in files)
{
    var msgBody = File.ReadAllText(file);
    var message = new ServiceBusMessage(msgBody);
    await dlqSender.SendMessageAsync(message);
}

不幸的是,这只是冻结在dlqSender.SendMessageAsync行的第一条消息,永远不会恢复。没有错误消息,也没有任何东西进入DLQ或队列。

我理解这可能是一个奇怪的使用场景,但我认为DLQ的行为与任何其他队列一样。最好能确认一下这是支持的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-06 14:12:53

您不能直接向死信队列发送全新的消息。死信队列的目的是存储无法从父队列/订阅处理的消息。因此,需要首先在父队列中找到消息,才能将其放入死信队列。

票数 0
EN

Stack Overflow用户

发布于 2021-12-06 12:33:27

您可以使用几种方法手动将消息发布到Azure Service Bus中的死信队列中。

  • 您可以使用DeadLetterAsync()方法将消息发送到死信队列。
  • 可以为订阅这些消息的队列定义一个非常少的TimeToLive值(如果可以的话,为零),这将导致消息在TTL过期后立即进入死信队列。(注意:EnableDeadLetteringOnMessageExpiration属性必须设置为true才能实现)

这里要注意的一点是,发布消息后,您可能不会立即看到消息进入死信队列,因为死信消息是由Microsoft.Azure.ServiceBus包的默认异步垃圾收集机制处理的,因此您需要等待GC完成它的工作&然后您应该能够在死信队列中看到您的消息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70245251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档