如何解决如何配置具有特定消息类型的过滤器?
我只想使用设置了特定类型和属性的消息。在创建任何使用者实例之前,一种消息内容过滤器。
我正在尝试为特定的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
解决方法
因此,曾经有一个扩展方法用于此目的,但我找不到它。您可以通过创建过滤器规范并按如下所示添加它,在创建使用者之前添加过滤器。
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()));
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。