我有两个服务,一个充当消费者,另一个充当生产者。以下是我对它们每个的配置。
生产者配置
services
.AddSingleton(KebabCaseEndpointNameFormatter.Instance);
services
.AddMassTransit(config =>
{
config.AddBus(serviceProvider =>
Bus.Factory.CreateUsingRabbitMq(config =>
{
config.Host(new Uri("amqp://admin:pass@localhost"));
}));
})
.AddMassTransitHostedService();
消费者配置
services
.AddSingleton(KebabCaseEndpointNameFormatter.Instance);
services
.AddMassTransit(config =>
{
config.AddSagaStateMachine<OrderStateMachine, OrderState>()
.RedisRepository();
config.AddBus(serviceProvider =>
Bus.Factory.CreateUsingRabbitMq(config =>
{
config.Host(new Uri("amqp://admin:pass@localhost"));
config.ReceiveEndpoint("service-5-queue", endpointConfig =>
{
endpointConfig.Consumer<SubmitOrderCommand>();
});
}));
})
.AddMassTransitHostedService();
按照一些在线教程,当应用程序启动时,我应该看到一些队列和交换被创建,其中之一应该是一些“订单状态”交换和队列。不幸的是事实并非如此。
任何使用公共交通的人都知道为什么会出现这种情况吗?
日志
[15:56:15 DBG] Declare queue: name: service-5-queue, durable, consumer-count: 0 message-count: 0
[15:56:15 DBG] Declare exchange: name: service-5-queue, type: fanout, durable
[15:56:15 DBG] Declare exchange: name: Messages:ISubmitOrder, type: fanout, durable
[15:56:15 DBG] Bind queue: source: service-5-queue, destination: service-5-queue
[15:56:15 DBG] Bind exchange: source: Messages:ISubmitOrder, destination: service-5-queue
[15:56:15 DBG] Consumer Ok: rabbitmq://localhost/service-5-queue - amq.ctag-X4WuaeOFDCCMcdEXd4EtuA
[15:56:15 DBG] Endpoint Ready: rabbitmq://localhost/service-5-queue
[15:56:15 INF] Bus started: rabbitmq://localhost/
发送一些消息会触发
consumer
,但 saga 不会在任何时刻触发,也不会在某些初始化步骤或其他步骤期间调用它。
[16:00:08 DBG] Declare exchange: name: Messages:IOrderSubmitted, type: fanout, durable [16:00:08 DBG] SEND rabbitmq://localhost/Messages:IOrderSubmitted 0cb00000-2327-309c-67c9-08d8ef964ca6 Messages.IOrderSubmitted
[16:00:09 DBG] Create send transport: rabbitmq://localhost/DESKTOPNH4IRSD_Service1_bus_b1ayyybdrhajaxmebdcq9fqbrz?temporary=true
[16:00:09 DBG] Declare exchange: name: DESKTOPNH4IRSD_Service1_bus_b1ayyybdrhajaxmebdcq9fqbrz, type: fanout, auto-delete
[16:00:09 DBG] SEND rabbitmq://localhost/DESKTOPNH4IRSD_Service1_bus_b1ayyybdrhajaxmebdcq9fqbrz?temporary=true 0cb00000-2327-309c-b0bc-08d8ef964d91 Messages.IOrderPreSubmissionOk [16:00:10 DBG] RECEIVE rabbitmq://localhost/service-5-queue 0cb00000-2327-309c-4f1f-08d8ef9647eb Messages.ISubmitOrder Service5.Handlers.SubmitOrderCommand(00:00:09.6961272)
您应该删除显式接收端点配置,并调用
ConfigureEndpoints
。这将为传奇创建端点。
services
.AddMassTransit(config =>
{
config.AddSagaStateMachine<OrderStateMachine, OrderState>()
.RedisRepository();
config.UsingRabbitMq((context,cfg) =>
{
cfg.Host(new Uri("amqp://admin:pass@localhost"));
cfg.ConfigureEndpoints(context);
});
})
.AddMassTransitHostedService();
因此,如果由于特定的队列名称、路由键而需要显式端点配置,我将无法使用公共交通传奇?