【问题标题】:How do I filter Service bus events with a Azure Function app?如何使用 Azure Function 应用筛选服务总线事件?
【发布时间】:2021-07-21 16:39:24
【问题描述】:

如何使用 Azure Function 应用过滤服务总线事件?如果我有一个“事件”主题,并且我将 10 个不同的事件发布到一个主题。如何让天蓝色函数过滤事件。 Azure Function Apps 服务是否允许在使用 Function Apps 时进行筛选?

【问题讨论】:

  • 您是使用服务总线作为输入触发器绑定还是输出绑定。如果输入绑定,您将已经在使用subscription name。如果这是真的,那么您可以将过滤器放在服务总线本身的订阅上。
  • @user1672994 很抱歉,您的回答对我没有意义。是的,它是一个输入绑定。我正在尝试订阅 azure 服务总线上某个主题的特定事件。但你的建议对我来说没有意义。 “将过滤器放在服务总线本身的订阅上”是在门户中吗?在函数的代码中?你能澄清一下吗?
  • @user1672994 所说的是正确的。我在回答中添加了一些细节。 TLDR - 使用 ASB 过滤消息,而不是函数。

标签: azure-functions azure-servicebus-topics


【解决方案1】:

队列和订阅触发 azure Functions;它们并非旨在过滤掉消息。如果您的主题接收到两个事件,EventAEventB,并且只有一个订阅触发了函数,那么这两种事件类型都将由函数处理。 “过滤”消息并执行正确的逻辑将是您的功能代码责任。可以通过查看客户标头(属性)或解析有效负载(消息正文)来完成过滤。

另一种方法是让服务总线上的专用订阅接收每种消息类型,并具有两个功能,每个事件类型一个。这意味着在 ServiceBus 中创建两个订阅,一个用于EventA,另一个用于EventB,然后为每个事件类型部署两个函数。这样,您可以让每个函数的逻辑只关注一种事件类型,而不必“过滤”掉任何东西。

另一种方法是使用可以为您完成此任务的消息传递中间件。这样你就可以有一个函数来处理两种或更多的消息类型,但保持你的代码干净并且有一个单一的职责——处理一个特定的消息类型。您可以使用 MassTransit 或 NServiceBus 来完成。

【讨论】:

  • Azure 服务总线上的所有文档都说它执行 Pub/Sub,并且它使用主题来执行此操作。但是我还没有开发一个有用的 pub / sub 系统来订阅总线上的每种类型的消息。每个订阅者都会收到每条消息。要么我必须为每个消息/事件类型设置一个单独的主题,要么当我过滤它并找到我不感兴趣的消息时,我需要返回它
  • 主题用于发布。一个主题可以包含多个订阅。每个订阅都充当一个队列来接收来自主题的消息。如果您的订阅规则是“catch all”,那么您的接收者(在这种情况下是一个函数)将获得所有消息。如果订阅有过滤器(相关或 SQL),那么每个订阅的函数 Neill 都会过滤掉消息。这与函数无关,而与代理以及如何使用 pub/sub 无关。有大量关于 ASB 的示例和文档说明了这一切。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
  • 2017-06-05
  • 1970-01-01
  • 2023-02-12
相关资源
最近更新 更多