-6ren">
gpt4 book ai didi

c# - 一个接收端点上具有相同消息类型的多个消费者

转载 作者:行者123 更新时间:2023-11-30 22:56:07 28 4
gpt4 key购买 nike

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

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> {}

上面的解决方案有效,每个消费者都会收到消息。即使一个失败(异常(exception))。

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

最佳答案

是的,您可以在同一个端点上注册多个消费者,以获得相同的消息类型,MassTransit 将负责将消息分发给这些消费者。

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

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

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

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

关于c# - 一个接收端点上具有相同消息类型的多个消费者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54685215/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com