azure中是否有任何方法可以根据azure服务总线中存在的密钥调用不同的azure函数?

问题描述 投票:0回答:1

我在azure中配置了服务总线队列,当发送消息时,它将触发azure功能。我想利用它,根据队列消息中存在的密钥,它应该自动触发不同的azure功能。

我尝试在下面的代码中实现这一点:

import azure.functions as func
import logging
import json
app = func.FunctionApp()

@app.service_bus_queue_trigger(arg_name="azservicebus", queue_name="queue-asb",
                               connection="azuretopicnamespace_SERVICEBUS") 
def servicebus_queue_trigger(azservicebus: func.ServiceBusMessage):
    message_body = azservicebus.get_body().decode('utf-8')
    message_data = json.loads(message_body)
    if message_data.get('key_val','') =='service_bus_queue':
        print("Inside the if statment")
        result = service_bus_queue(azservicebus)
        print("Result",result)

    else:
        print("Inside the else statement")
        servicebus_trigger(azservicebus)


@app.service_bus_queue_trigger(arg_name="azservicebus", queue_name="queue-asb",
                               connection="azuretopicnamespace_SERVICEBUS") 
def service_bus_queue(azservicebus:func.ServiceBusMessage):
    a = 1+2
    print(a)
    print("This is the first function will be triggered")
    return a

@app.service_bus_queue_trigger(arg_name="azservicebus", queue_name="queue-asb",
                               connection="azuretopicnamespace_SERVICEBUS") 
def servicebus_trigger(azservicebus: func.ServiceBusMessage):
    print("This is the second function will be trigered")

我不确定这是否是正确的方法?

azure azure-functions azureservicebus azure-triggers
1个回答
0
投票

Azure 函数由队列或订阅调用,并且您无法根据有效负载触发不同的函数,因为函数始终绑定到单个实体。

根据您拥有的密钥数量,您可以使用扇出策略,将消息发布到主题并拥有订阅该主题并根据密钥过滤消息的订阅。这种方法需要满足以下条件。

  1. 将密钥及其值提升到消息标头。
  2. 订阅主题并使用基于键/值的过滤器。
  3. 每个订阅都有一个功能。

这种方法对于少量的key来说是可行的。如果键的数量很大,或者本质上是动态的,您将需要采用不同的方法。

© www.soinside.com 2019 - 2024. All rights reserved.