asp.net-core - 在 DI 的上下文中,如何在 MassTransit 中使用“AddMediator()”扩展方法将“IConsumeMessageObserver”连接到消费者?
问题描述
我遇到了一个难题,我不知道如何使用扩展方法IConsumeMessageObserver
在 DI 上下文中添加实体。AddMediator()
在该部分(https://masstransit-project.com/advanced/observers.html#received-messages)中,仅显示如何手动操作。
我试图IMediator
在AddMediator()
通话后解决,如下所示:
private static void BindInMemoryBroker ( IServiceCollection services )
{
services.AddMediator ( configuration =>
{
AddInMemoryAddOnBroker ( configuration );
} );
var serviceProvider = services.BuildServiceProvider ();
var mediator = serviceProvider.GetService<IMediator> ();
var observer1 = serviceProvider.GetService<MailingObserver<RetrieveAddOnDownloadLinkContract>> ();
var observer2 = serviceProvider.GetService<IncrementAddOnDownloadCounterObserver<RetrieveAddOnDownloadLinkContract>> ();
mediator.ConnectConsumeMessageObserver ( observer1 );
mediator.ConnectConsumeMessageObserver ( observer2 );
}
private static void AddInMemoryAddOnBroker ( IServiceCollectionMediatorConfigurator configuration )
{
AddInMemoryConsumers ( configuration );
AddInMemoryContracts ( configuration );
}
private static void AddInMemoryConsumers ( IServiceCollectionMediatorConfigurator configuration )
{
configuration.AddConsumer<RetrieveAddOnDownloadLinkConsumer> ();
}
private static void AddInMemoryContracts ( IServiceCollectionMediatorConfigurator configuration )
{
configuration.AddRequestClient<RetrieveAddOnDownloadLinkContract> ();
}
但它没有用,请帮助我
解决方案
有两种类型的消费观察者,一种是传递所有消息类型(IConsumeObserver
),另一种是只传递一个消息类型(IConsumeMessageObserver
)。后者只能连接到IBus
or IMediator
,因此它不能在AddMediator
or配置中进行AddMassTransit
配置。
您可以添加IConsumeObserver
并使用模式匹配来仅选择您需要的消息类型作为替代。
推荐阅读
- excel - 在创建的 VBA 函数中使用 excel 函数
- cmake - 为什么 Cmake 的“ file(REMOVE_RECURSE [file1 ...]) ”不会删除具有 *.xxx.yy 扩展名的文件?
- java - 防止在 Spring Data MongoDB 中创建默认集合
- c - 用户空间中缺少 I2c eeprom 文件 - SFP 模块
- function - 如何在 Symfony 中使用函数?
- javascript - 如何使用 php 将值 html 从数据库插入到 javascript 中以用于 CKEDITOR?
- python - 如何杀死 PyQt5 中的 QRunnable?
- qt - 如何在 Qt 的 QUndoView 窗口中启用菜单栏?
- c++ - DirectX 11 ClearRenderTargetView 全屏问题
- c++11 - 语句超出功能,但在哪里?