我目前正在使用MassTransit和RabbitMQ构建一个系统作为我的消息传递层。我试图找到一种方法让一个消费者监听总线上所有类型的所有消息。这适用于我们的审计日志记录框架,我们希望记录通过消息总线的所有事件。
有没有办法在MassTransit中执行此操作?
答案 0 :(得分:7)
您需要在邮件中添加某种类型的审核界面,以便进行审核。例如,如果您要创建基本接口:
public interface IAuditable
{
DateTime Timestamp {get;}
string Username {get}
}
或者通常可用于审计的任何属性。然后,您可以订阅该界面并获取每条消息的副本。或者您可以将其设置为空接口并仅审核邮件标头。但是消息需要实现它并发布它以获得副本。
这似乎是个坏主意,因为你在整个地方创建了消息副本......
另一种方法是在消息使用中添加一个观察者,并使用该观察者写入审计存储或将消息发送到审计队列,并让该异步使用者写入审计存储。
问题是,如果您正在审核每条消息,并且每条消息都在发送审核消息,请确保您不要观察您的审核消费者,否则您将无限死亡。< / p>
观察者选项是我的最爱,因为它不仅记录了消息,而且允许捕获处置(成功/错误),以及消耗消息的主机,处理持续时间等。
答案 1 :(得分:1)
MassTransit内置了对审核的支持
看到这个链接:
https://masstransit-project.com/advanced/audit.html
因此,最好使用它们的内置功能,而不要创建观察者和其他黑客程序
每条消息需要保存两个主要部分以提供完整的审核:
消息元数据包括: