【问题标题】:Masstransit, saga resource not being createdMasstransit,未创建传奇资源
【发布时间】:2021-03-25 13:55:11
【问题描述】:

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

生产者配置

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


    【解决方案1】:

    您应该删除显式接收端点配置,并调用ConfigureEndpoints。这将为 saga 创建端点。

    services
        .AddMassTransit(config =>
        {
            config.AddSagaStateMachine<OrderStateMachine, OrderState>()
                .RedisRepository();
    
            config.UsingRabbitMq((context,cfg) =>
                {
                    cfg.Host(new Uri("amqp://admin:pass@localhost"));
    
                    cfg.ConfigureEndpoints(context);
                });
        })
        .AddMassTransitHostedService();
    

    【讨论】:

      猜你喜欢
      • 2013-03-29
      • 2021-12-01
      • 1970-01-01
      • 2017-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-11
      相关资源
      最近更新 更多