很难找到一些关于将所有消息都放入deadletter队列的好文档,并且可以看一看它们。我有一个Azure服务总线队列。我能找到的一切都是服务总线主题......有人可以帮我快速指导吗?
答案 0 :(得分:3)
死信队列是一个辅助子队列,病毒消息将被移动到该子队列中。 在天蓝色服务总线队列的情况下,DLQ的标准路径是queuePath / $ DeadLetterQueue。 所以你需要有另一个队列客户端来读取这个DLQ。
你会在.net客户端做类似的事情。
string connectionString = CloudConfigurationManager.GetSetting("Microsoft.ServiceBus.ConnectionString");
QueueClient Client = QueueClient.CreateFromConnectionString(connectionString, "QueueName");
// do whatever regular queue reading activities
// this is for dead letter queue
QueueClient deadLetterClient = QueueClient.CreateFromConnectionString(connectionString, QueueClient.FormatDeadLetterPath(Client.Path), ReceiveMode.ReceiveAndDelete);
BrokeredMessage receivedDeadLetterMessage;
while ((receivedDeadLetterMessage = deadLetterClient.Receive(TimeSpan.FromSeconds(10))) != null)
{
Console.WriteLine(receivedDeadLetterMessage);
}
答案 1 :(得分:2)
Azure门户现在提供了一个 service bus explorer (preview) 工具,用于对队列/主题及其失效的对象执行基本操作(例如发送,接收,查看)信实体,直接来自门户网站本身。查看有关使用此工具的详细说明的此链接- azure-service-bus-messaging-explorer。
要使用更多高级功能,例如导入/导出功能或测试主题,队列,订阅,中继服务,通知中心和事件中心的功能,请尝试使用社区拥有的运营支持系统(OSS)工具{{3 }}。 service bus explorer 与今天一样,您只能在Azure门户上的 服务总线资源管理器 的预览版中浏览32条消息。因此,如果您有更多消息要处理,那么您可能希望选择上述独立社区拥有的OSS工具。
答案 2 :(得分:0)
string connectionString = ConfigurationManager.AppSettings["connectionString"];
string queueName = ConfigurationManager.AppSettings["queueName"];
ServiceBusConnectionStringBuilder builder = new ServiceBusConnectionStringBuilder(connectionString);
MessagingFactory factory = MessagingFactory.CreateFromConnectionString(builder.ToString());
var client = QueueClient.CreateFromConnectionString(connectionString, queueName);
string deadLetterQueuePath = QueueClient.FormatDeadLetterPath(queueName);
QueueClient deadletterQueueClient = factory.CreateQueueClient(deadLetterQueuePath);
while (true)
{
BrokeredMessage brokeredMessage = deadletterQueueClient.Receive();
// Your Logic
}
答案 3 :(得分:0)
以下是如何使用Peek获取死信队列中所有消息列表的示例:
public async Task<IEnumerable<BrokeredMessage>> GetDeadLetterMessagesAsync(string connectionString,
string queueName)
{
var queue = QueueClient.CreateFromConnectionString(connectionString, QueueClient.FormatDeadLetterPath(queueName));
var messageList = new List<BrokeredMessage>();
BrokeredMessage message;
do
{
message = await queue.PeekAsync();
if (message != null)
{
messageList.Add(message);
}
} while (message != null);
return messageList;
}