gpt4 book ai didi

validation - MassTransit 3.2.1 - 验证

转载 作者:行者123 更新时间:2023-12-05 08:27:36 24 4
gpt4 key购买 nike

我想验证传入的消息,在我的例子中使用 FluentValidation,如果失败,它应该立即返回。我调查了http://docs.masstransit-project.com/en/latest/usage/observers.html ,就我而言,我喜欢

public class ConsumeObserver : IConsumeObserver
{
Task IConsumeObserver.PreConsume<T>(ConsumeContext<T> context)
{
//1.Validate here
//2. If success go on to consumer
//3. If fails exit with the result of validation and don't go through consumer.
}

Task IConsumeObserver.PostConsume<T>(ConsumeContext<T> context)
{

}

Task IConsumeObserver.ConsumeFault<T>(ConsumeContext<T> context, Exception exception)
{

}
}

因为我得到的消息已经反序列化,所以很容易使用验证器。问题是我不知道如何在不通过消费者的情况下返回,同时保留验证错误。

谢谢。

最佳答案

观察者通常是观察而不是采取行动,这就是 MassTransit 中观察者的方法。虽然您可以从 PreConsume 方法中抛出异常,这会导致消息重试或发送到错误队列,但对于可能不理解其中原因的开发人员来说,这并不是最明显的行为消息失败。

另一种方法是创建可以验证消息的中间件组件,如果它无效,则对消息执行特定操作(例如将其移动到无效队列,或将其转储到日志,或其他)以便从队列中删除消息。了解这可能如何影响消息生成器很重要。

例如,如果它是一条请求消息,而发送方正在等待响应,则丢弃该消息意味着不会收到任何响应。引发异常的消费者的默认行为是将错误传播回请求者,完成循环,因此请记住这一点。

另一种选择是使用注入(inject)的验证接口(interface)或在消费者本身内将验证行为添加到消费者。这样,消息的处理就在消费者身边,这提高了代码的内聚性,并使查看正在发生的事情变得容易。

理想情况下,在消息生产者处进行验证是最好的选择,以避免无效消息淹没队列。所以这是另一种选择。

因此,有多种选择,您的需求将决定哪种选择最有意义。

关于validation - MassTransit 3.2.1 - 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35867553/

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