MassTransit:有没有办法记录收入消息

MassTransit: is there a way to log income messages

我想记录我在 MassTransit 中使用的每条消息。有没有办法实现全局拦截器,我可以在其中处理收入消息或使用配置实现?

我当前的配置如下所示:

BusFactory = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
    var host = cfg.Host(new Uri(AppSettings.RmqConnectionString), h => { });

    cfg.UseNLog();

    cfg.ReceiveEndpoint(host, RmqPropertyKeys.CallbackQueue, e=> e.LoadFrom(container));
});

该文档包含一个示例中间件过滤器,它确实执行此操作,记录发送给消费者的每条消息。

http://masstransit-project.com/advanced/middleware/custom.html

如果您愿意,也可以使用内置的 LogFilter

cfg.UseLog(Console.Out, (context,logContext) => $"Format your log message");

另一种方法是使用ConsumeObserver

实现接口 IConsumeObserver:

public class ConsumeObserver : IConsumeObserver
{
    private readonly ILogger<ConsumeObserver> _logger;

    public ConsumeObserver(ILogger<ConsumeObserver> logger)
    {
        _logger = logger;
    }

    public Task ConsumeFault<T>(ConsumeContext<T> context, Exception exception) where T : class
    {
        //use _logger

        return Task.CompletedTask;
    }

    public Task PostConsume<T>(ConsumeContext<T> context) where T : class
    {
        //use _logger

        return Task.CompletedTask;
    }

    public Task PreConsume<T>(ConsumeContext<T> context) where T : class
    {
        //use _logger

        return Task.CompletedTask;
    }
}

然后连接你的观察者:

busControl.ConnectConsumeObserver(consumeObserver);