我当前正在运行一个 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
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();
}
另一种方法是将 Service Bus 与 RabbitMQ 集成,并通过以下链接使用 RabbitMQ 和 MassTransit:
如何将服务总线与RabbitMQ
集成开始使用MassTransit和RabbitMQ