公共交通断路器

ppcbkaq5  于 2022-11-08  发布在  RabbitMQ
关注(0)|答案(2)|浏览(154)

当使用带有RabbitMq的断路器时,如下所示:

sbc.ReceiveEndpoint(host, "IDocumentImported_Warehouses.Nls", ep => {
    ep.Consumer(() => _container.Resolve<DocumentConsumer>());
        ep.PrefetchCount = 1;

        ep.UseCircuitBreaker(cb => {
            cb.ResetInterval = TimeSpan.FromSeconds(10);
            cb.ActiveThreshold = 1;
            cb.TrackingPeriod = TimeSpan.FromSeconds(10);
        });
    });
});

DocumentConsumer正确地没有接收更多的消息,但是MassTransit仍然会使用来自RabbitMq的所有消息,并将它们放入错误队列。这是预期的行为吗?文档没有涵盖太多内容。

rryofs0p

rryofs0p1#

我认为我们不能只是停止接收端点。断路器只是一个中间件,它会主动失效,以防消费者崩溃超过阈值。
断路器的意义是允许失败的消费者背后的基础设施恢复,而不是得到任何更多的请求,可以使它永远超载。
您始终可以使用Fault<DocumentMessage>并重新发布出错的消息。
P.S.顺便说一下,大多数容器适配器都支持如下配置使用者:

ep.Consumer<DocumentConsumer>(_container);
vd2z7a6w

vd2z7a6w2#

公共交通在7.1.1版本中引入了"Kill Switch"
Kill开关用于防止失败的使用者将所有消息从输入队列移到错误队列。通过监视消息使用情况并跟踪消息成功和失败情况,Kill开关可在达到行程阈值时停止接收端点。

相关问题