【问题标题】:MassTransit: Generic Consume Filters independent for each consumerMassTransit:通用消费过滤器独立于每个消费者
【发布时间】:2021-07-11 20:00:15
【问题描述】:

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

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

是否有可能无论是否所有消费者都连接到同一个接收端点,只有他们消费者的过滤器应用于每条消息?

非常感谢。

问候

博尔哈

【问题讨论】:

  • 我这辈子从未见过如此出色的“非常糟糕”的英语。

标签: c# asp.net-core .net-core azureservicebus masstransit


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 嗨@Chris,我看过视频,非常清晰,非常有用。我有一个新问题。在视频中显示的过滤器不是范围过滤器,根据文档,范围过滤器仅适用于实现 IFilter<ConsumeContext<TMessage>> 的过滤器。是否可以实现一个作用域过滤器来实现另一种基于消费者的过滤器,例如IFilter<ConsumerConsumeContext<TConsumer>>IFilter<ConsumerConsumeContext<TConsumer, TMessage>> 类型的过滤器?是否有替代方法或不推荐这样做?问候
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多