MassTransit:独立于每个消费者的通用消费过滤器

MassTransit: Generic Consume Filters independent for each consumer

首先,请原谅我的英语,它很糟糕。我将 MassTransit 与 Azure 服务总线一起用于微服务之间的异步通信。我需要使用中间件消费过滤器从消息中获取元数据。

目前我有几个消费者“消费”不同的消息,但都来自同一个接收端点。这些消费者中的每一个都有自己的“ConsumeFilter”(零个、一个或多个),它们是 IFilter 类型范围的过滤器,并在“ConsumerDefinition”中注册 [=每个消费者的 28=],使用方法 .UseConsumeFilter(typeof(TFilter <>), context),目的是每个消费者只会应用其过滤器。 但是,必须将过滤器“添加”到端点接收器,因为当我收到一条消息时,它会通过所有消费者中定义的所有过滤器。

是否可以不管所有消费者是否都连接到同一个接收端点,每条消息都只应用其消费者的过滤器?

非常感谢。

此致

博尔哈

如果您有特定于消费者的过滤器,您有多种选择。您可以创建一个过滤器:

  1. 特定于消息类型ConsumeContext<TMessage>
  2. 特定于消费者类型ConsumerConsumeContext<TConsumer>
  3. 特定于消费者和消息类型ConsumerConsumeContext<TConsumer, TMessage>

在消息特定的情况下,您可以在接收端点上进行配置。在这种情况下,过滤器在消费者之前执行。

在特定于消费者的情况下,您可以在消费者配置器上配置它们(Configure 的第二个参数,在 ConsumerDefinition 中)。这些将在创建消费者之后调用,但在将消息分派给 Consume 方法之前调用。

produced a video 展示了每个选项的工作原理。