MassTransit: is there a way to log income messages

二次信任 提交于 2019-12-13 16:48:46

问题


I'd like to log every message that i consume in MassTransit. Is there a way to implement global interceptor where i could handle income message or achieve that using configuration?

My current config looks like this:

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));
});

回答1:


The documentation includes an example middleware filter which does exactly that, logs on every message that is delivered to a consumer.

http://docs.masstransit-project.com/en/latest/middleware/custom.html

You can also use the built-in LogFilter if you like:

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



回答2:


Another way is to use ConsumeObserver.

Implement the interface 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;
    }
}

Then connect your observer:

busControl.ConnectConsumeObserver(consumeObserver);



回答3:


You can also use the message audit mechanism



来源:https://stackoverflow.com/questions/39706284/masstransit-is-there-a-way-to-log-income-messages

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!