0
点赞
收藏
分享

微信扫一扫

【Azure 服务总线】Azure Service Bus中私信(DLQ - Dead Letter Queue)如何快速清理


【Azure 服务总线】Azure Service Bus中私信(DLQ - Dead Letter Queue)如何快速清理_占用空间

在博文​​ServiceBus 队列中死信(DLQ - Dead Letter Queue)问题​​一文中,介绍了服务总线产生私信的原因及可以通过代码的方式来清楚私信队列中的消息,避免长期占用空间(因为私信中的消息不会自动清理)

​​

【Azure 服务总线】Azure Service Bus中私信(DLQ - Dead Letter Queue)如何快速清理_占用空间

​​

当前,我们也可以从Azure门户中查看到当前DLQ的数量,所占空间及进入DLQ的原因

【Azure 服务总线】Azure Service Bus中私信(DLQ - Dead Letter Queue)如何快速清理_占用空间_03

问题描述

在使用Azure Service Bus过程中,随着时间的累积,当死信中存积了大量的消息时,如何快速的清理掉这些消息呢?

 

解决办法

使用Azure官方提供的工具 ​​Service Bus Explorer​​。 连接到当前的Service Bus,通过选择Receive and Delete操作来获取并从Service Bus服务端中删除消息。

1) 下载​​Service Bus Explorer​​,解压文件后,双击ServiceBusExplorer.exe

 

2) 连接到Service Bus中并查看死信消息

【Azure 服务总线】Azure Service Bus中私信(DLQ - Dead Letter Queue)如何快速清理_参考资料_04

3) Receive and Delete: 数据获取消息的数量,然后再Receive Mode中选择Receive and Delete

【Azure 服务总线】Azure Service Bus中私信(DLQ - Dead Letter Queue)如何快速清理_javascript_05

 

 

附录:另一种方式是通过代码来处理死信消息

如需要通过程序的方式获取死信队列中的消息,获取消息的方式和正常队列一样,把queueName变为死信队列的路径,通过QueueClient.FormatDeadLetterPath(queueName)方式获取

【Azure 服务总线】Azure Service Bus中私信(DLQ - Dead Letter Queue)如何快速清理_javascript_06

 

附上.NET伪代码:

static string queueName = "<QUEUE NAME>/$deadletterqueue";


static async Task ReceiveMessagesAsync()
{
await using (ServiceBusClient client = new ServiceBusClient(connectionString))
{
// create a processor that we can use to process the messages
ServiceBusProcessor processor = client.CreateProcessor(queueName, new ServiceBusProcessorOptions());

// add handler to process messages
processor.ProcessMessageAsync += MessageHandler;

// add handler to process any errors
processor.ProcessErrorAsync += ErrorHandler;

// start processing
await processor.StartProcessingAsync();

Console.WriteLine("Wait for a minute and then press any key to end the processing");
Console.ReadKey();

// stop processing
Console.WriteLine("\nStopping the receiver...");
await processor.StopProcessingAsync();
Console.WriteLine("Stopped receiving messages");
}
}

 

参考资料

从队列接收消息: ​​https://docs.azure.cn/zh-cn/service-bus-messaging/service-bus-dotnet-get-started-with-queues#receive-messages-from-a-queue​​Azure Service Bus 死信队列产生的原因: ​​javascript:void(0)​​Azure Service Bus Explorer: ​​https://github.com/paolosalvatori/ServiceBusExplorer/releases​​

 

当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!



举报

相关推荐

0 条评论