公共交通,未创建 saga 资源

问题描述 投票:0回答:2

我有两个服务,一个充当消费者,另一个充当生产者。以下是我对它们每个的配置。

生产者配置

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)
masstransit
2个回答
1
投票

您应该删除显式接收端点配置,并调用

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();

0
投票

因此,如果由于特定的队列名称、路由键而需要显式端点配置,我将无法使用公共交通传奇?

© www.soinside.com 2019 - 2024. All rights reserved.