从 MassTransit 的 PipeContext 获取消息类型

Get message type from PipeContext from MassTransit

我正在我的接收端点实现一个 MassTransit 中间件来记录处理消息的性能,我想从 PipeContext 中获取消息类型,我该如何获取?

public async Task Send(T context, IPipe<T> next)
    {
        // I want to know the message type from here so that i can log it
        using (_logger.BeginTimedOperation("Time for handling message", null, LogEventLevel.Debug))
        {
            await next.Send(context);

        }
    }

您需要在 ConsumeContext 处拦截,其中有一个 属性 用于序列化信封中的消息类型。

然后,您可以使用以下方法获取支持的消息类型:

IEnumerable<string> SupportedMessageTypes {get;}

这应该能让您获得记录消息类型和持续时间所需的信息。

所以按照以下方式过滤:

public class LogMessageTypeFilter :
    IFilter<ConsumeContext>
{
}

实现send方法,在方法中调用next,等待next管道完成后再执行。