【问题标题】:How to configure MassTransit Saga to use several custom named topics?如何配置 MassTransit Saga 以使用多个自定义命名主题?
【发布时间】:2021-11-17 14:32:07
【问题描述】:

我有一个 Saga,它从队列接收命令,将命令发送到另一个队列,转换到另一个状态并等待来自主题的事件,该主题的名称是自定义的(不是由 MassTransit 命名为事件类型名称)。我遇到了一个问题,即 Saga 对自定义命名主题的事件没有反应。

Saga 做了以下事情:

  1. 从队列中接收命令。

     cfg.ReceiveEndpoint("submit-order-queue", configureEndpoint =>
     {
         configureEndpoint.ConfigureSaga<OrderShipmentState>(context);
         configureEndpoint.RequiresSession = true;
    });
    
  2. 将命令发送到另一个队列并转换到另一个状态。我正在使用自定义活动。

  3. 使用主题中的事件。需要指定主题名称。

     cfg.SubscriptionEndpoint(
           "subsctiption1", "custom-name-topic", 
            configure =>
            {
                 configure.ConfigureSaga<OrderShipmentState>(context);
            });
    

我发现了几个类似的问题,例如 this 以及 Chris Patterson 的回答

如果您想为 saga 使用订阅端点,您需要 为每个事件配置相应主题的 saga。

我尝试使用上面的代码来实现这一点,但我还没有弄清楚如何在上面的配置中指定事件。下面的方法对我不起作用,因为我需要指定自定义主题名称:

void SubscriptionEndpoint<T>(string subscriptionName, Action<IServiceBusSubscriptionEndpointConfigurator> configure) where T : class;

结果,我能够执行第 1 步和第 2 步,但在第 3 步时,我在 ASB 订阅中收到了一个事件,但 Saga 没有对该事件作出反应。

任何建议我做错了什么?

【问题讨论】:

    标签: masstransit saga


    【解决方案1】:

    在上面的配置中,接收端点将为 saga 处理的每个事件创建订阅,这些订阅会将发送到主题的消息转发到 submit-order-queue。您无需创建订阅端点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-06
      相关资源
      最近更新 更多