如何配置具有特定消息类型的过滤器?
How to configure Filter with specific message type?
我只想使用特定类型和属性集的消息。创建任何消费者实例之前的一种消息内容过滤器。
我正在尝试为特定的 ConsumeContext 创建过滤器:
public class OrderFilter : IFilter<ConsumeContext<CreateOrderMessage>>
{
public Task Send(ConsumeContext<CreateOrderMessage> context, IPipe<ConsumeContext<CreateOrderMessage>> next)
{
if (context.Message.IsTrustedUser)
{
return next.Send(context); // continue processing
}
return Task.CompletedTask; // stop message processing
}
public void Probe(ProbeContext context) { }
}
如何注册这样的过滤器?
我尝试在端点中注册它,但没有成功。我有
cfg.ReceiveEndpoint("OrderQueue", ep =>
{
ep.UseFilter(new OrderFilter());
ep.Consumer<CreateOrderConsumer>();
});
我遇到以下错误:无法将实例参数类型“{MassTransit.IReceiveEndpointConfigurator,MassTransit.RabbitMqTransport.IRabbitMqReceiveEndpointConfigurator}”转换为 'GreenPipes.IPipeConfigurator<MassTransit.ConsumeContext<Core.CreateOrderMessage>>'
所以,曾经有一个用于此目的的扩展方法,但我找不到了。您可以在创建使用者之前添加过滤器,方法是创建过滤器规范并添加它,如下所示。
var filter = new OrderFilter();
var specification = new FilterPipeSpecification<ConsumeContext< CreateOrderMessage >>(filter);
ep.AddPipeSpecification(specification);
如果您想在消费者创建后执行过滤器(例如,如果您使用容器作用域来共享信息),您可以使用作用域消耗过滤器(在几个答案和文档中都有描述)或者您可以在消费者配置期间添加您的过滤器。
ep.Consumer<CreateOrderConsumer>(cc =>
{
cc.Message<CreateOrderMessage>(mc => mc.UseFilter(new OrderFilter()));
}
我只想使用特定类型和属性集的消息。创建任何消费者实例之前的一种消息内容过滤器。
我正在尝试为特定的 ConsumeContext 创建过滤器:
public class OrderFilter : IFilter<ConsumeContext<CreateOrderMessage>>
{
public Task Send(ConsumeContext<CreateOrderMessage> context, IPipe<ConsumeContext<CreateOrderMessage>> next)
{
if (context.Message.IsTrustedUser)
{
return next.Send(context); // continue processing
}
return Task.CompletedTask; // stop message processing
}
public void Probe(ProbeContext context) { }
}
如何注册这样的过滤器?
我尝试在端点中注册它,但没有成功。我有
cfg.ReceiveEndpoint("OrderQueue", ep =>
{
ep.UseFilter(new OrderFilter());
ep.Consumer<CreateOrderConsumer>();
});
我遇到以下错误:无法将实例参数类型“{MassTransit.IReceiveEndpointConfigurator,MassTransit.RabbitMqTransport.IRabbitMqReceiveEndpointConfigurator}”转换为 'GreenPipes.IPipeConfigurator<MassTransit.ConsumeContext<Core.CreateOrderMessage>>'
所以,曾经有一个用于此目的的扩展方法,但我找不到了。您可以在创建使用者之前添加过滤器,方法是创建过滤器规范并添加它,如下所示。
var filter = new OrderFilter();
var specification = new FilterPipeSpecification<ConsumeContext< CreateOrderMessage >>(filter);
ep.AddPipeSpecification(specification);
如果您想在消费者创建后执行过滤器(例如,如果您使用容器作用域来共享信息),您可以使用作用域消耗过滤器(在几个答案和文档中都有描述)或者您可以在消费者配置期间添加您的过滤器。
ep.Consumer<CreateOrderConsumer>(cc =>
{
cc.Message<CreateOrderMessage>(mc => mc.UseFilter(new OrderFilter()));
}