Azure Function App 不由事件中心触发

Posted

技术标签:

【中文标题】Azure Function App 不由事件中心触发【英文标题】:Azure Function App does not trigger by Event Hub 【发布时间】:2021-11-27 21:08:27 【问题描述】:

大家好。

我编写了 Python 函数来处理传入 EventHub 的 JSON 事件。这些事件是由 Debezium 生成的,这部分工作正常。从 Visual Studio Code 本地执行时,我的 python 代码也可以正常工作。当我将(使用 VSC)部署到 Azure Function App 时,问题就开始了。似乎传入事件不会触发函数应用执行。

我做错了什么?

我的功能码:

from typing import List
import logging
import json
import psycopg2

import azure.functions as func


def main(events: List[func.EventHubEvent]):
    #logging.info('Starting')
    conn = psycopg2.connect(database="RDSA", user='postgres', password='********', host='********.postgres.database.azure.com', port= '5432')
    #Creating a cursor object using the cursor() method
    cursor = conn.cursor()

    for event in events:
        row = json.loads(event.get_body().decode('utf-8'))
        #logging.info('Python EventHub trigger processed an event: %s',
        #                event.get_body().decode('utf-8'))
        rowDepartmentId=row["payload"]["after"]["departmentid"]
        rowDepartmentName=row["payload"]["after"]["name"]
        rowDepartmentGroupName=row["payload"]["after"]["groupname"]
        rowModifiedDate=row["payload"]["after"]["modifieddate"]

        SQL="""INSERT INTO CDCSTAGE.TF_DEPARTMENT (departmentid, \"name\", groupname, modifieddate)
             VALUES (%s, '%s', '%s', to_timestamp(%s / 1000000));""" % (rowDepartmentId, rowDepartmentName, rowDepartmentGroupName, rowModifiedDate)

        logging.info('=========== New record in DB: =============')
        logging.info('Department name: %s', row["payload"]["after"]["name"])
        logging.info('Department group: %s', row["payload"]["after"]["groupname"])
        logging.info('Modified date: %s', row["payload"]["after"]["modifieddate"])
        logging.info('SQL generated: %s', SQL)
        logging.info('===========================================')
            #Executing an mysql function using the execute() method
        cursor.execute(SQL)

    #Closing the connection
    conn.commit() 
    cursor.close()
    conn.close()

函数.json


  "scriptFile": "__init__.py",
  "bindings": [
    
      "type": "eventHubTrigger",
      "name": "events",
      "direction": "in",
      "eventHubName": "adventureworks.humanresources.department",
      "connection": "AazureEventhubKafka_RootManageSharedAccessKey_EVENTHUB",
      "cardinality": "many",
      "consumerGroup": "$Default",
      "dataType": "binary"
    
  ]

Trigger enabled on Azure portal

【问题讨论】:

这是一个天蓝色函数问题。您也应该标记它们。 用 azure-functions 标记 【参考方案1】:

如果 Function App 在本地运行并且在部署到 Azure 时未触发,通常的问题是由于应用程序设置中缺少连接字符串。本地项目中 local.settings.json 文件中的设置应与 Azure 中函数应用中的应用程序设置相同。通过 VS Code 部署时,您可以 publish them 到 Azure。您可以通过门户添加缺少的连接,也可以通过配置->新应用程序设置。

【讨论】:

谢谢!就是这样。我认为在 Microsoft Docs 中解释得不够清楚,或者至少我错过了。这是描述您需要在 VSC 中执行的操作的直接链接:docs.microsoft.com/en-us/azure/azure-functions/…

以上是关于Azure Function App 不由事件中心触发的主要内容,如果未能解决你的问题,请参考以下文章

Azure 事件中心 Event Grid(事件网格)+Azure Functions处理IOT Hub中的消息

消费层上 Azure Function App 的白名单 IP

具有输入绑定的 Azure 函数的 Azure 事件中心存储容器配置

Azure 事件中心脱机

从 Azure 事件中心获取事件后,是不是应该将它们放入队列中?

为啥 Azure 事件中心订阅者不起作用?