首页 > 解决方案 > ASP.NET Core 服务未创建 RabbitMQ 队列

问题描述

作为 MassTransit 和 RabbitMQ 的新用户,我目前正试图让我的 ASP.NET 核心服务与 MassTransit 一起使用。

使用此文档部分来配置 MassTransit 和 ASP.NET Core 我无法使其正常工作。

目前(部分) Startup.cs 看起来像

 services.AddMassTransit(x =>
            {
                x.AddConsumer<MailConsumer>();
                x.AddConsumer<MailFailedConsumer>();

                x.AddBus(provider => ConfigureBus(provider, rabbitMqConfigurations));
            });


private IBusControl ConfigureBus(
                            IServiceProvider provider,
                            RabbitMqConfigSection rabbitMqConfigurations) => Bus.Factory.CreateUsingRabbitMq(
                            cfg =>
                            {
                                var host = cfg.Host(
                                    rabbitMqConfigurations.Host,
                                    "/",
                                    hst =>
                                    {
                                        hst.Username(rabbitMqConfigurations.Username);
                                        hst.Password(rabbitMqConfigurations.Password);
                                    });

                                cfg.ReceiveEndpoint(host, $"{typeof(MailSent).Namespace}.{typeof(MailSent).Name}", endpoint =>
                                {
                                    endpoint.Consumer<MailConsumer>(provider);
                                });

                                cfg.ReceiveEndpoint(host, $"{typeof(MailSentFailed).Namespace}.{typeof(MailSentFailed).Name}", endpoint =>
                                {
                                    endpoint.Consumer<MailFailedConsumer>(provider);
                                });
                            });

交换是在 RabbitMQ 启动时自动创建的,但没有队列绑定到我期望的交换。

调用我的 API 端点后,我可以看到交换中的活动,但当然消费者什么都不做,因为没有队列。

我错过了什么(明显的)部分?

标签: c#asp.netrabbitmqmasstransit

解决方案


好的,我发现了问题。在编写文档时,它按照文档中的描述工作。接口有几个AddMassTransit扩展,IServiceCollection令人困惑。

AddMassTransit接受总线实例的重载按描述工作。

AddMassTransit重载,Action<IServiceCollectionConfigurator>它只接受必要的注册。

您需要添加一行:

services.AddMassTransitHostedService();

并且您的代码将起作用。


推荐阅读