使用MassTransit消耗所有消息

时间:2015-12-18 15:04:01

标签: c# masstransit

我目前正在使用MassTransit和RabbitMQ构建一个系统作为我的消息传递层。我试图找到一种方法让一个消费者监听总线上所有类型的所有消息。这适用于我们的审计日志记录框架,我们希望记录通过消息总线的所有事件。

有没有办法在MassTransit中执行此操作?

2 个答案:

答案 0 :(得分:7)

您需要在邮件中添加某种类型的审核界面,以便进行审核。例如,如果您要创建基本接口:

public interface IAuditable
{
    DateTime Timestamp {get;}
    string Username {get}
}

或者通常可用于审计的任何属性。然后,您可以订阅该界面并获取每条消息的副本。或者您可以将其设置为空接口并仅审核邮件标头。但是消息需要实现它并发布它以获得副本。

这似乎是个坏主意,因为你在整个地方创建了消息副本......

另一种方法是在消息使用中添加一个观察者,并使用该观察者写入审计存储或将消息发送到审计队列,并让该异步使用者写入审计存储。

问题是,如果您正在审核每条消息,并且每条消息都在发送审核消息,请确保您不要观察您的审核消费者,否则您将无限死亡。< / p>

观察者选项是我的最爱,因为它不仅记录了消息,而且允许捕获处置(成功/错误),以及消耗消息的主机,处理持续时间等。

答案 1 :(得分:1)

MassTransit内置了对审核的支持
看到这个链接: https://masstransit-project.com/advanced/audit.html

因此,最好使用它们的内置功能,而不要创建观察者和其他黑客程序

每条消息需要保存两个主要部分以提供完整的审核:

  • 消息本身
  • 元数据

消息元数据包括:

  • 消息ID
  • 消息类型
  • 上下文类型(发送,发布或使用)
  • 对话ID
  • 相关ID
  • 启动器ID
  • 请求ID(用于请求/响应)
  • 源地址
  • 目的地地址
  • 回复地址(用于请求/响应)
  • 故障地址