Azure服务总线 - 消息直接进入死信队列

时间:2018-03-01 14:27:41

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

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

var queueClient = new QueueClient(ServiceBusConnectionString, QueueName);

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

await queueClient.SendAsync(message);

但他们似乎直接进入了死记信息:

enter image description here

我还创建了一个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。我已尝试在本地运行该函数,但该函数未被命中。我觉得我在从函数中获取总线上的消息方面缺少一些基本的东西吗?

1 个答案:

答案 0 :(得分:5)

如果您转到功能应用日志,您可能会看到

等错误
  

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

功能应用尝试处理您的消息10次(默认),然后使用

将其放入DLQ
  

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

问题与你从"新的"发送消息这一事实有关。 .NET标准服务总线客户端,而功能应用程序v1正在使用"旧的"基于BrokeredMessage的客户端。它们在二进制级别上不兼容,请参阅this issue

在功能应用程序v2包括服务总线绑定准备就绪之前,您应该最好使用旧的Service Bus客户端发送消息。如果您必须使用新客户端,请参阅上面链接的问题中的一些解决方法,例如: this comment