【问题标题】:ASP.NET Core service not creating RabbitMQ queueASP.NET Core 服务未创建 RabbitMQ 队列
【发布时间】:2023-03-28 23:23:01
【问题描述】:

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

使用此documentation 部分来配置 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 端点后,我可以看到交换中的活动,但当然消费者什么也不做,因为没有队列。

我缺少什么(明显的)部分?

【问题讨论】:

  • 是的,MT 托管服务没有注册。你能把你的 repo 放到 GitHub 上吗?我可以快速浏览一下。

标签: c# asp.net rabbitmq masstransit


【解决方案1】:

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

AddMassTransit 过载,它接受总线实例按描述工作。

AddMassTransit 重载,接受Action&lt;IServiceCollectionConfigurator&gt; 只进行必要的注册。

你需要添加一行:

services.AddMassTransitHostedService();

你的代码就可以工作了。

【讨论】:

  • 谢谢!这很有帮助:-) 虽然现在我在健康检查中得到了MassTransit bus is not ready。但是创建了队列和交换!
  • 修复了MassTransit bus is not ready,添加了:cfg.UseHealthCheck(provider);
  • 是的,我相信那是在文档中 :) 仍然需要澄清这一点,感谢您指出 :)
猜你喜欢
  • 2022-01-04
  • 1970-01-01
  • 2020-04-10
  • 2015-06-16
  • 1970-01-01
  • 1970-01-01
  • 2022-09-30
  • 1970-01-01
  • 2014-02-11
相关资源
最近更新 更多