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);
我想记录我在 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);