Azure - 从服务总线队列触发通知

Azure - trigger notification from service bus queue

我正在尝试创建以下进程:

IoT 设备IoT Hub 发送一条消息,如果消息包含某些值,后者又会触发通知通过 Notification Hub.

注册的所有 android 设备

起初,我并不关心消息本身的内容是什么,我只想在收到每条消息时触发通知。

我已成功设置 IoT 设备并将其连接到 IoT 中心。 我还设法设置了通知中心,并将其与 android 应用程序连接,当我在通知中心使用 "test send" 时,会在 [=48] 上收到通知=] 设备.

为了连接两端(IoT Hub 和 Notification Hub),我尝试遵循以下教程:https://www.developer.com/ws/android/sending-notifications-to-mobile-apps-from-azure-function-apps.html

此外,我还添加了从 IoT 中心到服务总线中相应队列的路由。

现在,每当 IoT 设备向集线器发送消息时,我都可以看到队列接收到消息。但是,我似乎无法使用队列来触发通知。

我添加的ServiceHubQueueTrigger功能在传送门出现如下错误:

Error:

Function (ServiceBusQueueTrigger1) Error: The binding type(s) 'notificationHub' are not registered. Please ensure the type is correct and the binding extension is installed.

它的 function.json 看起来像这样:

{
  "bindings": [
    {
      "name": "myQueueItem",
      "type": "serviceBusTrigger",
      "direction": "in",
      "queueName": "notificationqueue",
      "connection": "ServiceBusConnection",
      "accessRights": "manage"
    },
    {
      "name": "notification",
      "type": "notificationHub",
      "hubName": "<hub-name>",
      "connection": "NotificationConnString",
      "platform": "gcm",
      "tagExpression": "",
      "direction": "out"
    }
  ]
}

其中 hub-name 是通知中心的名称。

如何通过队列触发 android 设备的通知? 有没有办法直接从 IoT Hub Event Trigger 函数触发它们?

谢谢!

是的,您可以直接从传入的 IoT 中心事件触发 Azure 函数。在这里查看我的示例之一:https://github.com/sebader/iotedge-end2end/blob/master/CloudFunctions/IotHubMessageProcessor.cs

public static void Run([IoTHubTrigger("messages/events", Connection = "iothubevents_cs", ConsumerGroup = "receiverfunction")]EventData message, ILogger log)
{
  log.LogInformation($"IotHubMessageProcessor received a message: {Encoding.UTF8.GetString(message.Body.Array)}");
}

IoT Hub 函数绑定:https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-event-iot

这似乎是一个简单的 1.x vs 2.x 函数版本问题。

要解决这个问题,如果您使用的是 Azure 门户:

  1. 新建 Function App.
  2. Function App Settings中,将版本设置为~1 请注意,对于新的功能应用程序,设置版本的选项不会变灰,您可以将其设置为~1。
  3. 然后,按照问题中 link 处的指南进行操作。

如果您正在使用 Visual Studio,只需在创建函数时选择 v1。

不幸的是,正如 Microsoft 文档中所写,通知绑定不支持函数 2.x。