c# - 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 端点后,我可以看到交换中的活动,但当然消费者什么都不做,因为没有队列。
我错过了什么(明显的)部分?
解决方案
好的,我发现了问题。在编写文档时,它按照文档中的描述工作。接口有几个AddMassTransit
扩展,IServiceCollection
令人困惑。
AddMassTransit
接受总线实例的重载按描述工作。
AddMassTransit
重载,Action<IServiceCollectionConfigurator>
它只接受必要的注册。
您需要添加一行:
services.AddMassTransitHostedService();
并且您的代码将起作用。
推荐阅读
- swift - swift - cannot play a video loaded with AVAssetResourceLoaderDelegate
- excel - Excel:根据上一个选择标准替换下一行中的文本
- android - 为什么在片段中工具栏= null?
- angular - 发现不兼容的对等依赖项 - 将 Angular 从 8 升级到 9
- arrays - 如何在按另一个属性分组的逻辑应用中组合 JSON 行
- c++ - Visual 2019 中的复制省略
- java - android中的AsyncTaskLoader函数错误
- java - 多次交互后 Android 活动滞后
- python - 在 CSV 文件上使用 for 循环附加空数据框
- javascript - 如何使用 Asp.Net Mvc 调用局部视图