C# .NetCore 2.2 - Azure Service Bus 3.4.0
在Azure服务总线中,我有3条具有相同属性的队列。在向这些队列发送消息时,其中一个队列中的消息总是被传递给死信队列,而其他两个队列则接收活动消息。
我试过使用属性-增加TTL,最大传递计数等。所有三个队列的属性是相同的,唯一的区别是队列的名称。
静态异步任务SendMessagesAsync(int numberOfMessagesToSend) {
try
{
for (var i = 0; i < numberOfMessagesToSend; i++)
{
// Create a new message to send to the queue.
string messageBody = $"Message {i}";
var message = new Message(Encoding.UTF8.GetBytes(messageBody));
Console.WriteLine($"Sending message: {messageBody}");
// Send the message to the queue.
await queueClient.SendAsync(message);
}
}
catch (Exception exception)
{
Console.WriteLine($"{DateTime.Now} :: Exception: {exception.Message}");
}
}
如何防止邮件进入死信队列?为什么只有一个队列而不是其他两个队列会发生这种情况呢?
发布于 2019-10-17 22:05:09
当消息是死字时,添加用户属性是有原因的.检查该属性以查看原因并相应地排除故障。具体来说,检查DeadLetterReason
和DeadLetterErrorDescription
自定义属性。
发布于 2019-10-17 21:43:27
如果没有看到你的应用程序/消息,就很难帮上忙。但是,在试图使用消息的应用程序中可能出现了错误。由于无法完成,该消息将转到死信队列。
记录来自这个特定队列的消息,并查看是否缺少任何必需的属性。有时,您试图反序列化为不兼容的类型。
死信队列的目的是保存无法传递给任何接收方的消息或无法处理的消息。
发布于 2019-11-12 03:39:49
消息被写成死字的常见原因是:
由于从队列接收消息时出现了一些错误,这些消息也可能会出现死信。正如Sean提到的,查看DeadLetterReason和DeadLetterDescription属性将有助于您清楚地诊断错误原因。
如果DeadLetterReason是TTLExpiredException,也尝试增加或设置发送的消息的生存期。因为如果您将消息的生存期设置为较低的值,则它将覆盖队列的生存时间属性。
检查队列是否是一个启用会话的队列,并且发送的消息是否设置了会话Id值。
https://stackoverflow.com/questions/58440734
复制相似问题