DotNet 隔离中服务总线队列上的 Azure 函数不适用于多条消息

问题描述 投票:0回答:1

最近我需要将我的Azure功能从WebJobs.ServiceBus升级到Azure.Function.SDK。

我需要升级它,因为我遇到了应用程序配置版本问题。

升级到 Azure Function Service Bus SDK 后,我的函数不再工作并出现以下错误

Microsoft.Azure.Functions.Worker.FunctionInputConverterException:转换函数“Function1”的 1 个输入参数时出错:无法将输入参数“myQueueItem”从类型“System.String”转换为类型“System.String[]”。

有人可以调查一下并帮助我解决这个问题吗?

感谢您的宝贵时间

如是

我的代码 我的函数.CSPRJ

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <AzureFunctionsVersion>v4</AzureFunctionsVersion>
    <OutputType>Exe</OutputType>    
  </PropertyGroup>
  <ItemGroup>
        <PackageReference Include="Microsoft.ApplicationInsights" Version="2.21.0" />
    <PackageReference Include="Microsoft.Azure.AppConfiguration.AspNetCore" Version="6.1.0" />
    <PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.1.0" />
    <PackageReference Include="Microsoft.Azure.ServiceBus" Version="5.2.0" />
    <PackageReference Include="Microsoft.Dynamics.Sdk.Messages" Version="0.5.17" />
    <PackageReference Include="Microsoft.Extensions.Configuration.AzureAppConfiguration" Version="6.1.0" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.19.0" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.ServiceBus" Version="5.14.1" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.15.1" />
  </ItemGroup>
  <ItemGroup>
    <None Update="host.json">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
    <None Update="local.settings.json">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </None>
  </ItemGroup>
</Project>

我的程序.CS文件

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

namespace CFX.Alerts.SBProcessor
{
    public class Program
    {
         public static void Main()
        {
            var host = new HostBuilder()
                .ConfigureFunctionsWorkerDefaults()
                .ConfigureServices((hostContext, services) =>
                {
                    var serviceProvider = services.BuildServiceProvider();
                    var logger = serviceProvider.GetService<ILogger<Function1>>();
                    services.AddSingleton(typeof(ILogger), logger);
                })
                .Build();

            host.Run();
        }
    }
}

我的函数.CS 文件

using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;

namespace CFX.Alerts.SBProcessor
{
    public class Function1
    {
        [Function("Function1")]
        public void Run([ServiceBusTrigger("customer.dev", Connection = "AzureWebJobsServiceBus")] 
        string[] myQueueItem, ServiceBusMessageActions messageActions, ILogger log)
        {
            log.LogInformation($"C# ServiceBus queue trigger function processed message: {myQueueItem}");
        }
    }
}

我遇到以下错误 enter image description here

我尝试了各种方法,删除并确保拥有最新的软件包。

我关注了以下文章

https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-service-bus

https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-service-bus-trigger

c# azure azure-functions azure-servicebus-queues
1个回答
0
投票

您的扳机上缺少

IsBatched
。 另外,如果您计划使用
ServiceBusMessageActions
,您将需要以
ServiceBusReceivedMessage[]
的形式接收消息。

[Function(nameof(ServiceBusReceivedMessageBatchFunction))]
public void ServiceBusReceivedMessageBatchFunction(
    [ServiceBusTrigger("queue", Connection = "ServiceBusConnection", IsBatched = true)] ServiceBusReceivedMessage[] messages)
{
    foreach (ServiceBusReceivedMessage message in messages)
    {
        _logger.LogInformation("Message ID: {id}", message.MessageId);
        _logger.LogInformation("Message Body: {body}", message.Body);
        _logger.LogInformation("Message Content-Type: {contentType}", message.ContentType);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.