c# - Masstransit 消耗故障而不将其从 _error 队列中取出
问题描述
嗨,我是公共交通和 RabbitMQ 的菜鸟。我正在尝试实现一个错误消费者,它只会从错误队列中读取,而不会实际消费并将消息从错误队列中取出。
我设置了一个消费者和一个错误消费者。
cfg.ReceiveEndpoint(host, nameof(MassMailJobCommand), e =>
{
e.Consumer<MassMailJobCommandConsumer>(context);
e.Consumer<FaultConsumer<MassMailJobCommand>>(context);
});
这是我的 FaultConsumer 课程
public class FaultConsumer<T> : IConsumer<Fault<T>>
{
private INotificationsClient _notificationsClient;
private NotificationsOptions _notificationsOptions;
private ILogger _logger;
public FaultConsumer(ILogger<T> logger,
IOptionsSnapshot<NotificationsOptions> notificationsOptions,
INotificationsClient notificationClient
)
{
_notificationsClient = notificationClient;
_notificationsOptions = notificationsOptions.Value;
_logger = logger;
}
public async Task Consume(ConsumeContext<Fault<T>> context)
{
string exceptions = "";
foreach (var ex in context.Message.Exceptions)
{
exceptions += $"{ex.StackTrace.ToString()};" +
"\n=================>>>>>>>>====================>>>>>>>>==========================\n" +
"====================== *END OF STACKTRACE* =========================\n" +
"===================>>>>>>>>====================>>>>>>>>==========================\n";
}
string message = $"Rabbit MQ Error:\n*Destination Address:* {context.DestinationAddress}\n*Original Message:* {context.Message.Message}\n*Exceptions:* {exceptions}";
await _notificationsClient.Slack(message);
}
}
它将它发送到一个松弛通道。它工作得很好,除了我不希望消息离开错误队列。
非常感谢。
解决方案
失败的消息总是被移动到_error
队列中。这是运输方式的一部分。
为其创建消费者Fault<T>
完全是一个单独的问题,并在消息出现故障时使用 MassTransit 发布的故障事件(并移动到上述错误队列)。
故障事件和将消息移动到错误队列都作为 MassTransit 的一部分发生。
另外,作为旁注,我建议将您的故障使用者放在单独的端点(例如fault-consumers
)上,以便故障消息不会与要处理的其他消息竞争。接收从队列中读取的端点并根据类型分派消息,因此一堆错误可能会出现在新命令的前面。
推荐阅读
- c# - AuthorizeFilter 失败时如何返回 403 而不是重定向访问被拒绝
- python - Python PyAutoGUI 返回“ImageNotFoundException”,但“except”不识别为异常
- javascript - 音频完成然后播放按钮图标再次显示
- java - Java AppletViewer 未初始化
- java - 如何将片段的上下文转换为 LifecycleOwner?
- autoit - 如何做到这一点发送(“发送(”$readme 1“)”)?
- kendo-ui - 具有自动完成功能的剑道时间选择器
- sql-server - 是否可以在sql-server中声明没有@符号的变量?
- c# - C# 试图压缩另一个线程使用的文件
- webpack - 开玩笑不解析 es6: SyntaxError: Unexpected token import