Azure Function ServiceBusReceivedMessage ApplicatonProperties 为空

Jas*_*ond 4 c# azureservicebus azure-functions

我正在创建一个作为 ServiceBus 触发器的 Azure 函数。

        [FunctionName("RetryRack")]
    public async Task Run([ServiceBusTrigger("%RackIntegration:topic%", "%RackIntegration:subscription%")] ServiceBusReceivedMessage sbMessage, ILogger log, MessageReceiver messageReceiver)
Run Code Online (Sandbox Code Playgroud)

我正在使用 Azure.Messaging.ServiceBus (7.6.0)。

当我使用同一库中的 ServiceBusMessage 发送消息时,我在消息中发送了几个自定义属性。我可以在 SB Explorer 中看到这些自定义属性,因此我知道它们设置正确。

SB 浏览器图像

现在,当我在函数中收到消息时,ApplicationProperties 为空。

观察名单

谁能帮我弄清楚为什么当我知道从 SB Explorer 中正确设置了自定义属性时,当我收到消息时自定义属性没有被填充?

仅供参考,我在发送消息时设置了这样的属性。

message.ApplicationProperties.Add("@message.event","eventName");
Run Code Online (Sandbox Code Playgroud)

这是我用来发送消息的方法

        public async Task SendMessage<T>(T messageObject)
    {
        ServiceBusMessage message = new ServiceBusMessage(JsonConvert.SerializeObject(messageObject));
        message.ApplicationProperties.Add(MessageProperties.Event, "RackIntegration");
        message.ApplicationProperties.Add(MessageProperties.Plant, "CNW");

        try
        {
            await sender.SendMessageAsync(message);
        }
        finally
        {
            await sender.DisposeAsync();
            await client.DisposeAsync();
        }

    }
Run Code Online (Sandbox Code Playgroud)

一旦服务总线触发器收到消息,我就会尝试获取这样的自定义属性

string prop1 = receivedMessage.ApplicationProperties[MessageProperties.Event].toString();
Run Code Online (Sandbox Code Playgroud)

正如我在上面的屏幕打印中所示,当函数触发器检索消息时,ApplicationProperties 集合为空。

我编写了一个小型控制台应用程序来使用 ServiceBusProcessor 手动接收消息。当我这样做时,ApplicationProperties 已正确填充。

所以看来这是 Function ServiceBus 触发器的问题......也许?

Jas*_*ond 10

显然,为了使用Azure.Messaging.ServiceBusNuget 包,您必须将其更新Microsoft.Azure.WebJobs.Extensions.ServiceBus到 5.x。

当我创建项目时,它安装了该软件包的 4.1.0 版本。我将其更新到最新的 5.2.0,现在一切正常。

谢谢