最近,我编写了一些代码,将从azure服务总线发出的死信队列消息处理为报表。
我正试图通过将大量的消息上传到死信队列中来测试该代码,以供其处理。
我组装了一个c# linqpad /控制台应用程序,该应用程序读取一个文本文件文件夹,并尝试使用Azure.Messaging.ServiceBus客户机库将每个文本文件作为消息发送给我的testqueue/$死信,如下所示:
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的行为与任何其他队列一样。最好能确认一下这是支持的。
发布于 2021-12-06 14:12:53
您不能直接向死信队列发送全新的消息。死信队列的目的是存储无法从父队列/订阅处理的消息。因此,需要首先在父队列中找到消息,才能将其放入死信队列。
发布于 2021-12-06 12:33:27
您可以使用几种方法手动将消息发布到Azure Service Bus中的死信队列中。
DeadLetterAsync()方法将消息发送到死信队列。TimeToLive值(如果可以的话,为零),这将导致消息在TTL过期后立即进入死信队列。(注意:EnableDeadLetteringOnMessageExpiration属性必须设置为true才能实现)这里要注意的一点是,发布消息后,您可能不会立即看到消息进入死信队列,因为死信消息是由Microsoft.Azure.ServiceBus包的默认异步垃圾收集机制处理的,因此您需要等待GC完成它的工作&然后您应该能够在死信队列中看到您的消息。
https://stackoverflow.com/questions/70245251
复制相似问题