我的Azure功能如何有选择地使用服务总线中的消息?

时间:2018-06-26 09:27:59

标签: azure azure-functions azureservicebus

我正在构建多个平台之间的集成模块,每个平台都需要发送和接收集成消息。我希望有一个简单的服务总线体系结构,所以不要有6个队列(3个系统,每个系统出入)。我想有一个“输出”队列和一个“输入”队列。

然后,我将在每个队列中放入具有特定数据类型的消息(例如,内容可能是:“ output.crm”,这意味着这是crm系统的输出。)。我有几个Azure函数正在侦听此队列,但是我只希望某些特定的函数实际处理该消息-知道如何处理“ output.crm”消息的函数。

那是-我正在尝试在其上实现“选择性消费者”类型的模式。使用Azure函数甚至可以做到这一点吗?

3 个答案:

答案 0 :(得分:1)

服务总线主题和订阅似乎可以帮助您:

  1. 创建一个主题。
  2. 使用元数据中的数据类型向此主题发送消息。
  3. 为每个Azure功能创建一个订阅。根据数据类型元数据值为每个订阅添加过滤器,请参见Topic filters and actions
  4. 配置功能以侦听相应的订阅。

答案 1 :(得分:0)

使单独的函数侦听相同的队列有什么用? 据我所知,通过多个侦听器侦听同一队列并不是一个好主意。(有一个队列分区的概念,但我对此并不十分熟悉。)

如果您想通过多个Servicebus侦听器侦听同一队列,则可以使用条件,如果条件不匹配,则放弃消息。 如果您希望以这种方式放弃邮件,那么我可能会帮助您。

注意,最好通过将单个Azure函数(Servicebus侦听器)设置为单个队列来区分职责,否则您可以选择使用主题。

答案 2 :(得分:0)

Mikhail回答的服务总线主题的另一种选择是使用Azure事件网格发布/订阅模型。

AEG是事件模型,其中自定义发布者(http客户端)将事件消息发送到自定义主题端点,并且AEG通知管理器将根据其订阅将其分发给所有订阅者。作为AEG订阅者,有一个EventGridTrigger函数。

请注意,此模型是推送模型,因此不需要任何侦听器来提取消息。

AEG限制为:

    每个Azure订阅
  • 100个自定义主题
  • 每个主题
  • 500个事件订阅
  • 每个主题每秒
  • 5000个事件