下面是我的发布者应用程序(一个netcore API)的代码。
services.AddMassTransit(masstransit =>
{
masstransit.UsingRabbitMq((context, cfg) =>
{
cfg.Host(new Uri("rabbitmq://srv-docker-dev-01"), "/", h =>
{
h.Username("guest");
h.Password("guest");
});
cfg.ReceiveEndpoint("implantacao", e =>
{
e.ConfigureConsumeTopology = false;
e.Bind<ClienteAlteradoEvento>();
});
});
});
甚至在创建消费者之前,我的RabbitMQ就显示了一个跳过的队列。
并且消息被传递到这个__跳过。
有人能告诉我我做错了什么吗?
以下是几点:
- 我的消费者将无法访问我的生产者的事件类。
- 我将有2个队列必须使用我的API。我可能会配置另一个接收端点。
- 我想我应该为每个微服务只创建一个交换。比如,所有由商业微服务发布的事件,应该使用相同的交换,但大众运输为每个类型创建一个交换。对吗?
任何想法和想法,将是受欢迎的。我只是了解RabbitMQ。
编辑
微服务A:拥有端点来接收客户的用户输入数据。用户发送姓名、合同和其他任何数据(许多不同类型的数据可以在不同的端点上更改)。每次更新客户时,此API也应发布消息来更新其他微服务。假设我们至少有3个不同的事件:客户数据更新事件、客户地址更新事件、客户合同更新事件。
微服务B:要使用由微服务A发布的来自客户的更新。我们无权访问CustomerDataUpdatedEvent、CustomerAddressUpdatedEvent、CustomerContractsUpdatedEvent类。我们应在其端生成类类型。
微服务C:要使用由微服务A发布的来自客户的更新。我们无权访问CustomerDataUpdatedEvent、CustomerAddressUpdatedEvent、CustomerContractsUpdatedEvent类。我们应在其端生成类类型。
B和C都不能访问微服务A上的类类型。
可能吗?有道理吗?
谢谢
3条答案
按热度按时间cbjzeqam1#
您正在配置一个没有任何使用者的接收端点,因此所生成的任何到达队列的消息都将被复制到
_skipped
队列。我建议使用reading some documentation来了解消息、使用者和端点是如何配置的。
我不建议对服务中的所有消息使用单个交换(甚至单个队列),但由于您刚刚开始学习,所以我真的不知道在没有细节的情况下还有什么建议。
au9on6nz2#
Chris Patterson不推荐使用here,您可以使用RabbitMQ.Client,但这并非不可能。在本文档中,有两种方法可以更好地理解:
Send<T>(...)
Publish<T>(...)
lfapxunr3#
我刚刚意识到MassTransit并不是我现在想要的。我读到过RabbitMQ,人们告诉我MassTransit应该是一个不错的方法,但我不同意。也许对于某些场景来说,它是完美的,但当你不能在两个项目上使用相同的类型时,这是一个痛苦。“交换必须是类型”不够灵活。
我的问题是克里斯给出的答案。但是弥撒不会做我想要的。他的答案是正确的,顺便说一句。