当使用带有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的所有消息,并将它们放入错误队列。这是预期的行为吗?文档没有涵盖太多内容。
2条答案
按热度按时间rryofs0p1#
我认为我们不能只是停止接收端点。断路器只是一个中间件,它会主动失效,以防消费者崩溃超过阈值。
断路器的意义是允许失败的消费者背后的基础设施恢复,而不是得到任何更多的请求,可以使它永远超载。
您始终可以使用
Fault<DocumentMessage>
并重新发布出错的消息。P.S.顺便说一下,大多数容器适配器都支持如下配置使用者:
vd2z7a6w2#
公共交通在7.1.1版本中引入了"Kill Switch"。
Kill开关用于防止失败的使用者将所有消息从输入队列移到错误队列。通过监视消息使用情况并跟踪消息成功和失败情况,Kill开关可在达到行程阈值时停止接收端点。