是否可以在不使用实际事件中心的情况下在本地执行事件中心触发的Azure功能? 定时器触发器EventGridTriggerEventHubTrigger元数据

问题描述

我只想问一问,是否有可能仅在本地计算机上执行Azure功能(事件中心触发器),而不依赖于任何Azure事件中心资源? 我一直在跟踪Microsoft在本地开发Azure函数Link)的过程,但是似乎我需要填写Event Hub连接字符串和名称

public static async Task Run([EventHubTrigger("samples-workitems",Connection = "eventhub-connectionstring")] EventData[] events,ILogger log)

有什么可能的方法吗?

解决方法

不,这不可能。

这是因为没有官方的仿真工具。

对于httptrigger,您可以使用邮差或仅使用一些代码来攻击端点。

要获取有关天蓝色存储的触发器,可以使用本地天蓝色存储浏览器。

但是如果不创建天蓝色资源,则无法触发诸如eventhub,服务总线之类的东西。

,

每个绑定都有一个用于本地测试和调试的 HTTP 端点。

  • https://localhost:7071/admin/functions/{FUNCNAME}

至少可用于 QueueTrigger、ServiceBusTrigger、TimerTrigger、EventHubTrigger。

使用 JSON 格式的预期数据发送 POST 请求。

{ "input": "YOUR JSON SERIALIZED AND ESCAPED DATA" }

对于需要数据的触发器,将数据作为序列化字符串放入“输入”。请参阅下面的 EventHubTrigger 示例。

定时器触发器

对于 TimerTrigger 使用这个:

{ "input": null }

EventGridTrigger

要在某些触发器上执行此操作有点棘手。这是EventGridTrigger

  • https://localhost:7071/runtime/webhooks/EventGrid/functionName={FUNCNAME}

发送 POST 请求以执行。有关详细信息,请参阅 here。对象必须是数组。

EventHubTrigger

EventHubTrigger 像其他触发器一样接收数据,作为单个 JSON 对象。该结构遵循 EventData 类,但唯一需要的字段是“SystemProperties”。似乎没有特定于序列化程序的设置,属性名称不更改大小写等。

将此作为正文发布;

{
    "input": "{\"SystemProperties\":{},\"SomeId\":\"123\",\"Status\":\"Available\"}"
}

事件中心的主体是“输入”的转义和序列化值。

请注意,这同样适用于 IoT 中心

元数据

对于所有触发器,您可以通过 GET 请求获取元数据。对于 EventHubTrigger,这可能如下所示:

{
    "name": "StateChange","script_root_path_href": "http://localhost:7071/admin/vfs/StateChange/","script_href": "http://localhost:7071/admin/vfs/bin/MyApp.Notifications.Functions.dll","config_href": "http://localhost:7071/admin/vfs/StateChange/function.json","test_data_href": null,"href": "http://localhost:7071/admin/functions/StateChange","invoke_url_template": null,"language": "DotNetAssembly","config": {
        "generatedBy": "Microsoft.NET.Sdk.Functions-3.0.11","configurationSource": "attributes","bindings": [
            {
                "type": "eventHubTrigger","consumerGroup": "regular","connection": "EventHub_Hub_Status","eventHubName": "%EventHub_Status%","name": "statusUpdateMessage"
            }
        ],"disabled": false,"scriptFile": "../bin/MyApp.Notifications.Functions.dll","entryPoint": "MyApp.Notifications.Functions.StateChange.Run"
    },"files": null,"test_data": null,"isDisabled": false,"isDirect": true,"isProxy": false
}

当然,您可以使用所有路径来检索数据,包括二进制文件。非常方便编写复杂的集成测试。