Служба ASP.NET Core не создает очередь RabbitMQ - PullRequest
5 голосов
/ 27 июня 2019

Будучи новым пользователем 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 я вижу активность на бирже, но, конечно, потребители ничего не делают, поскольку очереди нет.

Какую (очевидную) часть я упускаю?

1 Ответ

3 голосов
/ 27 июня 2019

Хорошо, я нашел проблему.Это работало, как описано в документах на момент написания документов.Есть несколько AddMassTransit расширений для интерфейса IServiceCollection, что сбивает с толку.Перегрузка

AddMassTransit, которая принимает экземпляр шины, работает, как описано. Перегрузка

AddMassTransit, которая принимает Action<IServiceCollectionConfigurator>, только делает необходимые регистрации.

Вам нужнодобавьте одну строку:

services.AddMassTransitHostedService();

и ваш код будет работать.

...