【问题标题】:Azure Functions - IoTHubTrigger But It will not triggerAzure Functions - IoTHubTrigger 但它不会触发
【发布时间】:2019-07-29 21:19:17
【问题描述】:

我使用 IoT 中心触发器创建了一个 azure 函数。作为一个例子,我使用这个Azure Functions - how to set up IoTHubTrigger for my IoTHub messages?

函数1.cs

using IoTHubTrigger = Microsoft.Azure.WebJobs.ServiceBus.EventHubTriggerAttribute;

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.ServiceBus.Messaging;
using System.Text;
using System.Net.Http;

namespace LogTheIoTHubMessage
{
    public static class Function1
    {
        private static HttpClient client = new HttpClient();

        [FunctionName("Function1")]
        public static void Run([IoTHubTrigger("messages/events", Connection = "ConnectionString")]EventData message, TraceWriter log)
        {
            log.Info($"C# IoT Hub trigger function processed a message: {Encoding.UTF8.GetString(message.GetBytes())}");
        }
    }
}

local.settings.json

{
    "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "AzureWebJobsDashboard": "UseDevelopmentStorage=true",
    "ConnectionString": "HostName=AAA.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=YYYYYY"
  }
}

但是当我测试该功能时,它会启动但触发器不会触发。对于测试,我使用

C:\Program Files\mosquitto>mosquitto_pub -d -h AAA.azure-devices.net -i TestRaspberryPi -u "AAA.azure-devices.net/TestRaspberryPi" -P "SharedAccessSignature sr=YYY" -m "noch ein test" -t “设备/TestRaspberryPi/消息/事件/readpipe/”--cafile "c:\Projects\azureiot.pem" -p 8883 -V mqttv311

客户端 TestRaspberryPi 发送 CONNECT 客户端 TestRaspberryPi 接收 CONNACK (0) 客户端 TestRaspberryPi 发送 PUBLISH (d0, q0, r0, m1, 'devices/TestRaspberryPi/messages/events/readpipe/', ... (13 bytes)) 客户端 TestRaspberryPi 发送 DISCONNECT

【问题讨论】:

  • 您能否指出有关您方法的官方文档?

标签: azure-functions azure-iot-hub


【解决方案1】:

你的函数看起来都很好,只是你的连接字符串是错误的。您需要来自事件中心终结点的连接字符串。它应该是这样的:

Endpoint=sb://iothub-ns-xxxxxxx.servicebus.windows.net/;SharedAccessKeyName=iothubowner;SharedAccessKey=*******;EntityPath=abc

类似的例子见这里:https://github.com/sebader/iotedge-end2end/blob/master/CloudFunctions/IotHubMessageProcessor.cs

【讨论】:

    【解决方案2】:

    EventHubTriggerAttribute 的第一个参数是eventHubName,而您传入​​的是端点名称。

    您必须使用端点的“事件中心兼容名称”:

    “事件中心兼容端点”应用作连接字符串。

    顺便说一下,建议为您的触发器使用专门的消费者组。

    希望这会有所帮助。

    【讨论】:

    • 这是不正确的。他使用的 IoTHubTrigger 属性看起来不错。
    • 不,这是正确的。 (不可能有两种正确的方法吗?:))。参考thisthis
    • 好的,授予 :) 他也可以使用 EventHubTrigger 属性。在这种情况下是的,他需要 eventthubname。但由于他正在连接到 IoT Hub 并且已经在使用触发器,所以我会坚持下去。
    • 使用EventHubTrigger,看看他的第一行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 2021-02-08
    • 2018-10-26
    • 2017-10-29
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    相关资源
    最近更新 更多