将使用者连接到预先配置的接收端点



我使用的是ASPNET Core,并且严重依赖依赖依赖注入。

我希望我的事件使用者将消息中的数据存储到数据库中(数据库是一项服务(,但当我通过配置使用者时,服务还没有被解决

services.AddMassTransit(x =>
{
x.UsingRabbitMq((context, configuration) =>
{
configuration.Host("rabbitmq", "/", h =>
{
h.Username("root");
h.Password("root");
});
configuration.ReceiveEndpoint("event-bus", e =>
{
e.Consumer(() => new UserCreatedConsumer(<service here>)))
});
});
});
services.AddMassTransitHostedService();

现在,我尝试在构建服务提供商和容器之后添加消费者,使用以下代码:

var busControl = provider.GetService<IBusControl>();
busControl.ConnectConsumer(() => new UserCreatedConsumer(
provider.GetService<NoticeboardMasterStore>()
));
busControl.ConnectConsumer(() => new TokenCreatedConsumer(
provider.GetService<NoticeboardMasterStore>()
));

遗憾的是,这并没有奏效——它只是添加了一个名为a0062491f73f_VehiclooNoticeboardService_bus_yyboyyfcnebrfjsdbdcj8cmrbz的奇怪队列,消息甚至没有触发消费者。

首先,如果您有一个具有依赖关系的使用者,并且正在使用容器,我建议您遵循文档,尤其是在底部,它显示了如何在容器的接收端点上配置使用者。

在您的情况下,这看起来像:

services.AddMassTransit(x =>
{
x.AddConsumer<UserCreatedConsumer>();
x.UsingRabbitMq((context, configuration) =>
{
configuration.Host("rabbitmq", "/", h =>
{
h.Username("root");
h.Password("root");
});
configuration.ReceiveEndpoint("event-bus", e =>
{
e.ConfigureConsumer<UserCreatedConsumer>(context);
});
});
});
services.AddMassTransitHostedService();

您的任何使用者依赖关系也应该在容器中注册(它们可以是作用域、瞬态或单例的——为传递到使用者实例的每个消息创建一个新的作用域(。

最新更新