如何将blob名称传递给不同的azure python函数

如何将blob名称传递给不同的azure python函数,python,azure-functions,azureservicebus,azure-servicebus-queues,azure-function-app,Python,Azure Functions,Azureservicebus,Azure Servicebus Queues,Azure Function App,我有3个azure函数,第一个是blob触发器,第二个是服务总线队列触发器,第三个是服务总线主题函数。这些函数运行良好,但现在我需要在所有3个函数中都有blob名称,这有助于触发第一个函数。在blob触发器函数中,我可以使用输入绑定的path变量获取blob名称,但我无法找到将此blob名称变量传递给其他两个函数的方法。是否可以在其他函数的绑定中以动态方式传递此变量?如果您谈论的是用代码传递动态blob名称,则不可能。这是因为blob输入绑定或blob触发器的blob名称值被设计为const(因

我有3个azure函数,第一个是blob触发器,第二个是服务总线队列触发器,第三个是服务总线主题函数。这些函数运行良好,但现在我需要在所有3个函数中都有blob名称,这有助于触发第一个函数。在blob触发器函数中,我可以使用输入绑定的path变量获取blob名称,但我无法找到将此blob名称变量传递给其他两个函数的方法。是否可以在其他函数的绑定中以动态方式传递此变量?

如果您谈论的是用代码传递动态blob名称,则不可能。这是因为blob输入绑定或blob触发器的blob名称值被设计为const(因此必须在编译之前设置)

唯一的方法是使用设计开始时留下的机制

您可以执行以下操作:

\uuuu init\uuuuu.py

import logging

import azure.functions as func


def main(msg: func.ServiceBusMessage, outputblob: func.Out[func.InputStream]):
    logging.info('Python ServiceBus queue trigger processed message: %s',
                 msg.get_body().decode('utf-8'))
    outputblob.set('111')
{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "name": "msg",
      "type": "serviceBusTrigger",
      "direction": "in",
      "queueName": "myqueue",
      "connection": "bowman1012_SERVICEBUS"
    },
    {
      "name": "outputblob",
      "type": "blob",
      "path": "{mypath}/111.txt",
      "connection": "MyStorageConnectionAppSetting",
      "direction": "out"
    }
  ]
}
function.json

import logging

import azure.functions as func


def main(msg: func.ServiceBusMessage, outputblob: func.Out[func.InputStream]):
    logging.info('Python ServiceBus queue trigger processed message: %s',
                 msg.get_body().decode('utf-8'))
    outputblob.set('111')
{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "name": "msg",
      "type": "serviceBusTrigger",
      "direction": "in",
      "queueName": "myqueue",
      "connection": "bowman1012_SERVICEBUS"
    },
    {
      "name": "outputblob",
      "type": "blob",
      "path": "{mypath}/111.txt",
      "connection": "MyStorageConnectionAppSetting",
      "direction": "out"
    }
  ]
}
您可以向服务总线发送json格式的消息:

{
    "mypath":"bowman"
}
然后,您可以将blob发送到所需的动态路径:


简而言之,不可能使用编码。你只能通过azure功能设计开始时留下的东西来实现它。

但是blob名称仍然在这里固定。我还想向服务队列发送json消息,但找不到方法或引用。你们可以参考一些文档或链接,我可以在这里检查是否有json传递到队列,或者你们可以给出一些例子。我在考虑发送json,其中我将给出两个参数,一个是blob name,另一个是queue msg。@sam这是发送消息的方法:并将属性设置为发送json格式:您可以首先尝试使用上面给出的连接自己执行此操作。我有事要做,我需要出去。如果你做不到,我会回来用一个简单的例子更新你。@sam顺便说一句,如果你对绑定的格式不满意,你可以直接使用SDK,这可能更免费。(绑定也基于servicebus sdk,但如果是绑定,则只能通过json获取值。)您好,有更新吗?你现在能解决吗?嗨@BowmanZhu,我能实现。基本上,我的第一个功能是blob触发,其他功能与服务总线相关。所以我将包含文件名和数据的json消息从function1发送到function2,然后从function2发送到function3。下面是我正在使用的方法。data=myblob.read().decode('utf-8')filename=myblob.name.split(os.path.sep)[-1]json_data={“File”:filename,“Body”:data}msg.set(json_data)如果我的答案对你有帮助,你能把它标记为结束这个问题的答案吗?:)谢谢。