Azure Functions 使用 MassTransit 发布到 RabbitMQ

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

我当前正在运行一个 Azure Function,该函数使用 Masstransit 发布到 Azure 服务总线。为了便于调试,我希望能够在本地运行该函数并发布到本地 RabbitMQ 实例。

在消费者方面,一切都连接良好,我可以通过 RabbitMQ 管理 UI 发布消息。然而,在函数上,我在尝试配置 RabbitMQ 时不断看到以下异常:

MassTransit.ConfigurationException:“SetBusFactory”只能调用一次。

这是我的函数 Startup.cs

public override void Configure(IFunctionsHostBuilder builder)
    {
        builder
            .Services
            .AddScoped<MyService1>()
            .AddScoped<MyService2>()
            .AddMassTransitForAzureFunctions(massTransitConfig =>
            {
                massTransitConfig.UsingRabbitMq((context, config) =>
                {
                    config.Host("localhost", "/", h =>
                    {
                        h.Username("guest");
                        h.Password("guest");
                    });
                });
                massTransitConfig.SetKebabCaseEndpointNameFormatter();
            }, "AzureWebJobsServiceBus");
    }

我正在检查 AddMassTransitForAzureFunctions 方法的源代码,它似乎会自动添加到 Azure 服务总线实例的连接。这是否意味着 Azure Functions 目前不支持 RabbitMQ?任何帮助或澄清将不胜感激。

框架-.NET 6.0 相关库 - MassTransit 8.0.15、MassTransitRabbitMQ 8.0.15

asp.net-core azure-functions rabbitmq masstransit
1个回答
0
投票
  • 出现错误“MassTransit.ConfigurationException:'SetBusFactory'只能调用一次”,因为
    AddMassTransitForAzureFunctions
    默认使用 Azure 服务总线配置 MassTransit。您尝试使用
    UsingRabbitMq
    与此现有配置冲突。感谢@Md Farid Uddin Kiron对该方法的评论。
public static void Main()
{
    var host = Host.CreateDefaultBuilder(args)
        .ConfigureFunctionsWorkerDefaults()
        .ConfigureServices(services =>
        {
            services.AddMassTransit(x =>
            {
                x.UsingRabbitMq((context, cfg) =>
                {
                    cfg.Host("localhost", "/", h =>
                    {
                        h.Username("guest");
                        h.Password("guest");
                    });
                });
            });
            // ... other services
        })
        .Build();

    host.Run();
}

enter image description here

另一种方法是将 Service Bus 与 RabbitMQ 集成,并通过以下链接使用 RabbitMQ 和 MassTransit:

© www.soinside.com 2019 - 2024. All rights reserved.