如何在Python中本地开发EventHub触发函数(编程模型v2)?

8i9zcol2  于 2023-05-16  发布在  Python
关注(0)|答案(2)|浏览(147)
    • bounty已结束**。回答此问题可获得+50声望奖励。赏金宽限期12小时后结束。DataBach正在寻找来自可靠来源的**答案 *:赏金获得者需要回答所有三个问题。答案需要是彻底的,并提供一个“这样做”一步一步的指导。

我想学习使用Visual Studio Code在本地开发Azure Functions。虽然有numerous examplesdemos可用于使用HTTP触发器,但我很难找到有关为event-triggered functions创建最小工作示例的信息。我甚至遇到了一些关于是否可以在不连接到实际事件中心服务的情况下进行本地开发的disagreements
我有几个问题要问社区:
1.在本地开发事件触发的函数是否可行(并付出合理的努力)?
1.如果有人成功地做到了这一点,你能提供一个例子吗?我已经看过几篇文章了,但我很难把所有的东西放在一起。我看到有提到“迅雷客户端”,但我对它不熟悉。有人能解释一下这是否是一种选择以及它是如何工作的吗?

  1. host.json和local.settings.json文件应该是什么样子?
    我想从Microsoft提供的示例测试代码开始。代码如下:
import azure.functions as func
import logging

app = func.FunctionApp()

@app.function_name(name="EventHubTrigger")
@app.event_hub_message_trigger(arg_name="hub", 
                               event_hub_name="<EVENT_HUB_NAME>",
                               connection="<CONNECTION_SETTING>") 

def test_function(myhub: func.EventHubEvent):
    logging.info('Python EventHub trigger processed an event: %s',
                myhub.get_body().decode('utf-8'))

我很感激你能提供的任何指导或帮助。谢谢你!

qco9c6ql

qco9c6ql1#

Microsoft提供了有关如何使用VSCode、命令提示符/终端、Visual Studio和Maven配置开发环境以开发Azure函数的信息。
在他们的文档中,他们提到Azure Functions extension for VS CodeAzure Functions Core Tools分别用于VS代码和命令提示符/终端。Visual Studio被注意到包含Azure函数。
Azure Functions Python developer guide详细介绍了如何利用这些工具以及如何为Azure Functions平台进行开发。

wlwcrazw

wlwcrazw2#

1.在本地开发事件触发的函数是否可行(并付出合理的努力)?
是的,在本地运行Azure Event Hub触发器函数是可行且容易的,如果您在Function应用门户中部署相同的函数也是如此。
1.如果有人成功地做到了这一点,你能提供一个例子吗?我已经看过几篇文章了,但我很难把所有的东西放在一起。我看到有提到“迅雷客户端”,但我对它不熟悉。有人能解释一下这是否是一种选择以及它是如何工作的吗?
Azure Event Hub触发器顾名思义将在事件中心接收到事件后触发。
我的Azure Event Hub触发器函数已成功运行,请在本地参考以下内容:-

  • 创建Event Hub函数和在Event Hub中发送事件的步骤,也可以参考这个MS Document:-*

在VS代码中使用Azure Event Hub触发器创建一个新的Function触发器,如下所示,确保安装了Azure Function扩展:
我在VS代码中打开了一个文件夹,并创建了一个新的函数触发器,如下所示:

现在创建一个local.settings.json,如下所示:

选择Create new local app setting和Select your Eventhubnamespace,如下所示:-
像下面这样选择你的EventhubNamespace:-

选择eventhub如下:-

选择使用者组作为默认值:-

事件中心触发器已成功创建:-

现在,在另一个终端的VS代码中打开一个新的文件夹,并添加以下代码来发送事件。
我引用了下面的MS Document代码,但我添加了下面的代码,以JSON而不是字符串的形式发送数据,因为Azure事件中心触发器仅在基于JSON的数据传递到事件中心时才会触发:

eventsender.py

import  json

  

from  azure.eventhub  import  EventData

from  azure.eventhub.aio  import  EventHubProducerClient

  

EVENT_HUB_CONNECTION_STR = "eventhubconnectionstring"

EVENT_HUB_NAME = "siliconeventhub"<eventhub name not event hub
namespace>

  

async  def  run():

# Create a producer client to send messages to the event hub.

# Specify a connection string to your event hubs namespace and

# the event hub name.

producer = EventHubProducerClient.from_connection_string(

conn_str=EVENT_HUB_CONNECTION_STR, eventhub_name=EVENT_HUB_NAME

)

async  with  producer:

# Create a batch.

event_data_batch = await  producer.create_batch()

  

# Add events to the batch.

event_data_batch.add(EventData(json.dumps({"message": "First
event"})))

event_data_batch.add(EventData(json.dumps({"message": "Second
event"})))

event_data_batch.add(EventData(json.dumps({"message": "Third
event"})))

  

# Send the batch of events to the event hub.

await  producer.send_batch(event_data_batch)

  

asyncio.run(run())

运行Event Hub触发器,如下所示:
单击fn + f5或单击运行>调试>它将提示您连接到存储帐户,如下所示:-

选择存储帐户,如下所示:-

事件中心触发函数成功运行,如下所示:-

在另一个标签页中运行**eventsender.py**代码,如下所示:-

我的函数成功触发,如下所示:-

我的event hub命名空间reference:-

连接字符串引用MS Document:-

我的eventhub默认消费组:-

更新编程模型V2:-

Azure Event Hub触发器***我使用Python编程模型v2创建了一个Azure Event Hub触发器,如下所示:-***

***我尝试在local.settings.json中设置UseDevelopmentStorage:true值,但当我运行它时,它要求我连接到存储帐户,因为我没有安装Azure存储模拟器和azurite扩展,为了使用UseDevelopmentStorage:true运行您的函数代码,请安装Azurite扩展并从该Link安装Azure存储模拟器,并在VS代码中启动它,您的函数将在不需要连接到存储帐户的情况下运行,即使它要求您连接到存储帐户,您也可以单击调试。
参考下文:-
local.settings.json:-

{

"IsEncrypted": false,

"Values": {

"FUNCTIONS_WORKER_RUNTIME": "python",

"AzureWebJobsStorage": "UseDevelopmentStorage=true",

"AzureWebJobsFeatureFlags": "EnableWorkerIndexing",

"connection":"Endpoint=sb://siliconeventhub.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=zSxxxxNOrjxxxxxxxx/bnxxxxI4d1gQ="

}

}

在您的VS代码中安装Azurite扩展,以使UseDevelopmentStorage=true像下面这样工作:-

我的host.json:-

{

"version": "2.0",

"logging": {

"applicationInsights": {

"samplingSettings": {

"isEnabled": true,

"excludedTypes": "Request"

}

}

},

"extensionBundle": {

"id": "Microsoft.Azure.Functions.ExtensionBundle",

"version": "[3.15.0, 4.0.0)"

}

}

我的functionapp.py代码来自此MS文档:-

import logging
import azure.functions as func

app = func.FunctionApp()

@app.function_name(name="EventHubTrigger1")
@app.event_hub_message_trigger(arg_name="myhub", 
                               event_hub_name="siliconeventhub",
                               connection="connection") 
def test_function(myhub: func.EventHubEvent):
    logging.info('Python EventHub trigger processed an event: %s',
                myhub.get_body().decode('utf-8'))

我添加了connection=“connection”,它从local.settings.json获取值。

现在,我使用本地Azure存储模拟器和设置"AzureWebJobsStorage": "UseDevelopmentStorage=true"成功运行了触发的函数和事件中心。
单击Fn + F5或Run > Start Debugging以运行V2 Function,或者在弹出此消息时单击Debug,因为我们已经在使用Azurite和Azure Storage模拟器

注意-为了解决上述警告,如果您使用下面的步骤启动了Azure存储模拟器,则它不会像上面那样给予您调试警告。
现在,我通过在开始菜单中搜索它来启动Azure存储模拟器,如下所示:

Azure存储模拟器启动如下:-

使用v2编程模型成功触发Azure事件中心,如下所示。

相关问题