我目前正在构建一个使用MassTransit和RabbitMQ作为我的消息传递层的系统.我正试图找到一种方法让一个消费者监听总线上所有类型的所有消息.这适用于我们的审计日志记录框架,我们希望记录通过消息总线的所有事件.
有没有办法在MassTransit中这样做?
您需要在消息中添加某种类型的审核界面,以便进行审核.例如,如果要创建基本接口:
public interface IAuditable { DateTime Timestamp {get;} string Username {get} }
或者通常可用于审计的任何属性.然后,您可以订阅该界面并获取每条消息的副本.或者您可以将其设置为空接口并仅审核邮件标头.但是消息需要实现它并发布它以获得副本.
这似乎是个坏主意,因为你正在创建各地的消息副本......
另一种方法是向消息使用添加观察者,并使用该观察者写入审计存储或将消息发送到审计队列,并让该异步使用者写入审计存储.
问题是,如果您正在审核每条消息,并且每条消息都在发送审核消息,请确保您没有观察您的审核消费者,否则您将死于无限死亡.
观察者选项是我的最爱,因为它不仅记录消息,而且允许捕获处置(成功/错误),以及消耗消息的主机,处理持续时间等.