将消费者连接到预配置的接收端点
Connect consumers to pre-configured receive endpoint
我正在使用 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
,并且消息甚至不会触发消费者。
首先,如果您有一个具有依赖关系的消费者并且正在使用容器,我建议您遵循 the documentation – 特别是在底部,它显示了如何在容器的接收端点上配置消费者。
在你的情况下,这看起来像:
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();
您的任何消费者依赖项也应在容器中注册(它们可以是作用域的、瞬态的或单例的——为传递给消费者实例的每条消息创建一个新的作用域)。
我正在使用 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
,并且消息甚至不会触发消费者。
首先,如果您有一个具有依赖关系的消费者并且正在使用容器,我建议您遵循 the documentation – 特别是在底部,它显示了如何在容器的接收端点上配置消费者。
在你的情况下,这看起来像:
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();
您的任何消费者依赖项也应在容器中注册(它们可以是作用域的、瞬态的或单例的——为传递给消费者实例的每条消息创建一个新的作用域)。