MassTransit:独立于每个消费者的通用消费过滤器
MassTransit: Generic Consume Filters independent for each consumer
首先,请原谅我的英语,它很糟糕。我将 MassTransit 与 Azure 服务总线一起用于微服务之间的异步通信。我需要使用中间件消费过滤器从消息中获取元数据。
目前我有几个消费者“消费”不同的消息,但都来自同一个接收端点。这些消费者中的每一个都有自己的“ConsumeFilter”(零个、一个或多个),它们是 IFilter 类型范围的过滤器,并在“ConsumerDefinition”中注册 [=每个消费者的 28=],使用方法 .UseConsumeFilter(typeof(TFilter <>), context),目的是每个消费者只会应用其过滤器。
但是,必须将过滤器“添加”到端点接收器,因为当我收到一条消息时,它会通过所有消费者中定义的所有过滤器。
是否可以不管所有消费者是否都连接到同一个接收端点,每条消息都只应用其消费者的过滤器?
非常感谢。
此致
博尔哈
如果您有特定于消费者的过滤器,您有多种选择。您可以创建一个过滤器:
- 特定于消息类型
ConsumeContext<TMessage>
- 特定于消费者类型
ConsumerConsumeContext<TConsumer>
- 特定于消费者和消息类型
ConsumerConsumeContext<TConsumer, TMessage>
在消息特定的情况下,您可以在接收端点上进行配置。在这种情况下,过滤器在消费者之前执行。
在特定于消费者的情况下,您可以在消费者配置器上配置它们(Configure
的第二个参数,在 ConsumerDefinition
中)。这些将在创建消费者之后调用,但在将消息分派给 Consume
方法之前调用。
我 produced a video 展示了每个选项的工作原理。
首先,请原谅我的英语,它很糟糕。我将 MassTransit 与 Azure 服务总线一起用于微服务之间的异步通信。我需要使用中间件消费过滤器从消息中获取元数据。
目前我有几个消费者“消费”不同的消息,但都来自同一个接收端点。这些消费者中的每一个都有自己的“ConsumeFilter”(零个、一个或多个),它们是 IFilter
是否可以不管所有消费者是否都连接到同一个接收端点,每条消息都只应用其消费者的过滤器?
非常感谢。
此致
博尔哈
如果您有特定于消费者的过滤器,您有多种选择。您可以创建一个过滤器:
- 特定于消息类型
ConsumeContext<TMessage>
- 特定于消费者类型
ConsumerConsumeContext<TConsumer>
- 特定于消费者和消息类型
ConsumerConsumeContext<TConsumer, TMessage>
在消息特定的情况下,您可以在接收端点上进行配置。在这种情况下,过滤器在消费者之前执行。
在特定于消费者的情况下,您可以在消费者配置器上配置它们(Configure
的第二个参数,在 ConsumerDefinition
中)。这些将在创建消费者之后调用,但在将消息分派给 Consume
方法之前调用。
我 produced a video 展示了每个选项的工作原理。