【问题标题】:Azure service bus - message going straight to dead letter queueAzure 服务总线 - 消息直接进入死信队列
【发布时间】:2018-03-01 14:27:41
【问题描述】:

我有以下代码向总线发送消息:

var queueClient = new QueueClient(ServiceBusConnectionString, QueueName);

var message = new Message(poco.SerializeToBytes());

await queueClient.SendAsync(message);

但他们似乎直接进入了死信消息计数:

我还创建了一个用于接收消息的 Azure 函数:

    [FunctionName("ServiceBusFunction")]
    public static void Run([ServiceBusTrigger("schedule", AccessRights.Listen, Connection = "ServiceBusConnection")]byte[] myQueueItem, TraceWriter log)
    {
        log.Info($"C# ServiceBus queue trigger function processed message: {myQueueItem}");
    }

当我关闭该功能时,在我创建此功能之前,消息已进入 ACTIVE MESSAGE COUNT。我尝试在本地运行该功能,但该功能没有被击中。我觉得我在从函数中获取总线上的消息方面缺少一些基本的东西?

【问题讨论】:

  • 请正确检查相关队列的最大传递计数。这决定了何时应该将消息发送到死信队列。还要检查邮件的传递计数属性。这告诉您一条消息已被处理了多少次。请使用这些值更新您的问题。

标签: azure azure-functions azureservicebus azure-servicebus-queues


【解决方案1】:

如果您查看 Function App 日志,您可能会看到类似的错误

异常绑定参数“myQueueItem”。 Microsoft.Azure.WebJobs.ServiceBus:ContentType 为“null”的 BrokeredMessage 无法反序列化为字节 [],并显示以下消息:“反序列化 System.Byte [] 类型的对象时出错。输入源的格式不正确。'。 System.Runtime.Serialization:反序列化 System.Byte[] 类型的对象时出错。输入源的格式不正确。 System.Runtime.Serialization:输入源格式不正确。 2018-03-01T15:14:41.578

Function App 尝试处理您的消息 10 次(默认),然后将其放入 DLQ

在 10 次传递尝试后无法使用消息。

问题与您从“新”.NET Standard Service Bus 客户端发送消息有关,而 Function App v1 使用“旧”基于BrokeredMessage 的客户端。而且它们在二进制级别上不兼容,请参阅this issue

在包含 Service Bus 绑定的 Function App v2 准备就绪之前,您最好使用旧的 Service Bus 客户端来发送消息。如果您必须使用新客户端,请参阅上面链接的问题中的一些解决方法,例如this comment.

【讨论】:

  • 啊。这完全有道理。谢谢。
猜你喜欢
  • 2017-02-13
  • 1970-01-01
  • 2018-04-01
  • 2017-06-07
  • 1970-01-01
  • 2014-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多