【发布时间】:2020-09-16 22:04:29
【问题描述】:
我创建了一个微服务应用程序,该应用程序使用 MassTransit 和 RabbitMQ 进行微服务通信。
每个微服务都使用干净的架构开发,因此我们在每个微服务中都有 MediatR。
是否也可以使用 MassTransit 进行内部通信?所以我可以对所有服务使用相同的签名,当我想公开一个服务以在微服务间使用时,它会很容易做到。
所以 MediatR 用于内部通信,RabbitMQ 用于内部通信,整个宇宙都在 MassTransit 系统上。
[更新]我的问题是我们如何配置消费者,以便一些可以用于内部通信(通过 MediatR),有些可用于外部通信(通过 RabbitMQ),并且可以轻松地将它们从内部更改为外部。
[Update2] 例如,这是我的 MassTransit 注册:
services.AddMassTransit(x =>
{
x.AddConsumers(Assembly.GetExecutingAssembly());
x.AddBus(provider =>
Bus.Factory.CreateUsingRabbitMq(cfg =>
{
cfg.Host(new Uri(config.RabbitMQ.Address), h =>
{
h.Username(config.RabbitMQ.Username);
h.Password(config.RabbitMQ.Password);
});
cfg.ReceiveEndpoint("my-queue", ep => { ep.ConfigureConsumers(provider); });
}));
x.AddMediator((provider, cfg) => { cfg.ConfigureConsumers(provider); });
});
内部沟通和外部沟通有什么不同?换句话说,我怎样才能将一些消费者注册到 MediatR 而一些消费者注册到 RabbitMQ?
【问题讨论】:
-
根据您的更新,您需要使用 MassTransit 中介为消费者提供一个单一界面,您可以将其移动到中介或 RabbitMQ 端点。
标签: rabbitmq microservices masstransit mediatr