.net 添加耗电元件时,将MassTransit置于发动机罩下
我试图理解使用MassTransit时会发生什么,不是完全依赖于这个抽象层库,而是真正了解和理解引擎盖下正在创建的内容及其背后的原因 在我的应用程序中,我以以下方式注册消费者:.net 添加耗电元件时,将MassTransit置于发动机罩下,.net,rabbitmq,masstransit,.net,Rabbitmq,Masstransit,我试图理解使用MassTransit时会发生什么,不是完全依赖于这个抽象层库,而是真正了解和理解引擎盖下正在创建的内容及其背后的原因 在我的应用程序中,我以以下方式注册消费者: container.AddMassTransit(x => { x.AddBus(context => Bus.Factory.CreateUsingRabbitMq(cfg => { var host = cfg.Host(configurationProvider.R
container.AddMassTransit(x =>
{
x.AddBus(context => Bus.Factory.CreateUsingRabbitMq(cfg =>
{
var host = cfg.Host(configurationProvider.RabbitHostName);
x.AddConsumer<FactAddedHandler>();
x.AddConsumer<FactAddedOrderHandler>();
x.AddConsumer<FactCategoryHandler>();
cfg.ConfigureEndpoints(container);
}));
});
这让我相信每个特定的消费者都有一个队列。
所以我们有这样一个场景:
让我们看看这些处理程序是如何定义的:
internal class FactAddedHandler : IConsumer<FactAddedIntegrationEvent>
{
//
}
internal class FactAddedOrderHandler : IConsumer<FactAddedIntegrationEvent>
{
//
}
internal class FactCategoryHandler : IConsumer<FactCategoryIntegrationEvent>
{
//
}
所以。。我所期望的是,IntegrationEvents:FactAddedIntegrationEvent是广播FactAddedIntegrationEvent的扇出交换
我还认为,masstransit默认创建其他exchangeIntegrationEvents:FactCategoryIntegrationEvent,这样就很容易将其他消费者添加到同一事件中,即使在我的案例中只有一个消费者
因此,我们最终会出现这种情况,这种情况仍然有意义:
我不理解并希望得到解释的是创建其余3家交易所的原因。他们的角色是什么?他们为什么在那里?提前谢谢 对于接收端点,MassTransit将创建一个队列和一个同名的匹配交换。队列已绑定到匹配的exchange 接收端点上的使用者使用的消息类型用于声明交换(如上所示),并且匹配的交换绑定到这些消息类型交换。所有这些交换都是扇出交换 生成的拓扑通过匹配的交换路由所有消息类型,然后交换路由到队列 本文将通过中的一个示例对此进行说明 为什么要进行匹配交换?两个答案 首先,简单的回答是,它允许使用路由密钥将消息发送到exchange。使用RabbitMQ发送到队列需要一个以队列名称作为路由密钥的空交换
其次,它允许将其他队列绑定到匹配的exchange以进行故障排除。这包括设置窃听以保留发送到端点的所有消息的副本(直接或通过已发布的消息类型交换)。对于接收端点,MassTransit将创建具有相同名称的队列和匹配交换。队列已绑定到匹配的exchange 接收端点上的使用者使用的消息类型用于声明交换(如上所示),并且匹配的交换绑定到这些消息类型交换。所有这些交换都是扇出交换 生成的拓扑通过匹配的交换路由所有消息类型,然后交换路由到队列 本文将通过中的一个示例对此进行说明 为什么要进行匹配交换?两个答案 首先,简单的回答是,它允许使用路由密钥将消息发送到exchange。使用RabbitMQ发送到队列需要一个以队列名称作为路由密钥的空交换
其次,它允许将其他队列绑定到匹配的exchange以进行故障排除。这包括设置一个窃听,以保留发送到端点的所有消息的副本(直接或通过已发布的消息类型交换)。一如既往!非常感谢您的解释!一如既往的好!非常感谢您的解释!
internal class FactAddedHandler : IConsumer<FactAddedIntegrationEvent>
{
//
}
internal class FactAddedOrderHandler : IConsumer<FactAddedIntegrationEvent>
{
//
}
internal class FactCategoryHandler : IConsumer<FactCategoryIntegrationEvent>
{
//
}
FactCategoryHandler fanout
FactAddedOrderHandler fanout
FactAddedHandler fanout
IntegrationEvents:FactAddedIntegrationEvent fanout
IntegrationEvents:FactCategoryIntegrationEvent fanout