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

Dav*_*ers 4 azure azureservicebus azure-servicebus-queues azure-functions

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

var queueClient = new QueueClient(ServiceBusConnectionString, QueueName);

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

await queueClient.SendAsync(message);
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

我还创建了一个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}");
    }
Run Code Online (Sandbox Code Playgroud)

当我关闭该功能时,在创建此功能之前,消息进入ACTIVE MESSAGE COUNT.我已尝试在本地运行该函数,但该函数未被命中.我觉得自己错过了从函数中获取总线上的消息方面的基本信息吗?

Mik*_*kov 6

如果您转到功能应用程序日志,您可能会看到错误

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

功能应用程序尝试处理您的消息10次(默认),然后将其放入DLQ

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

问题与您从"新的".NET标准服务总线客户端发送消息这一事实有关,而Function App v1正在使用"旧的" BrokeredMessage客户端.并且它们在二进制级别上不兼容,请参阅此问题.

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