【问题标题】:Multiple Consumers of the same message type on one receive endpoint在一个接收端点上具有相同消息类型的多个消费者
【发布时间】:2019-07-08 04:10:04
【问题描述】:

在单个接收端点上使用相同消息类型的不同消费者是一种有效的解决方案,还是应该为每个消费者使用一个接收端点?

cfg.ReceiveEndpoint(host, "MyQueue", e =>
            {
                logger.LogInformation("Consuming enabled.");

                //register consumers with middleware components
                e.Consumer<MyConsumer>(context);
                e.Consumer<MyOtherConsumer>(context);
            })

public class MyConsumer : IConsumer<MyMessage> {}

public class MyOtherConsumer : IConsumer<MyMessage> {}

上述解决方案有效,每个消费者都会收到消息。即使一个失败(例外)。

我为什么要问这个?我们当前的解决方案是每个消息类型都有一个消费者。消费者将收到的消息传递给内部自定义可扩展管道进行处理。如果上述解决方案可行,我们可以放弃或拥有自定义管道,而改用 MassTransit。

【问题讨论】:

    标签: c# rabbitmq masstransit


    【解决方案1】:

    是的,您可以在同一个端点上注册多个消费者,用于相同的消息类型,MassTransit 将处理向这些消费者分派消息。

    您还可以自定义端点管道,以及每个消费者的管道,以便对不同的消费者应用不同的过滤器。

    ec.Consumer<MyConsumer>(context, c => c.UseRetry(r => r.Interval(2,1000)));
    ec.Consumer<MyOtherConsumer>(context, c => c.UseRetry(r => None()));
    

    这是 MT 被重写以围绕管道构建的核心原因之一(这是几年前的事了,但仍然如此)以及如何创建 GreenPipes。

    附带说明,您可以将每个消费者放在一个单独的端点上,然后发布消息,这将为每个消费者提供自己的副本 - 如果需要,还可以拥有自己的执行上下文(包括重试和代理错误处理)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-17
      • 1970-01-01
      • 1970-01-01
      • 2013-04-10
      • 2016-12-27
      • 1970-01-01
      相关资源
      最近更新 更多