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

时间:2019-05-28 15:37:00

标签: azure azure-functions azure-iot-hub azure-notificationhub azure-servicebus-queues

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

IoT设备 IoT Hub 发送一条消息,如果该消息包含某些值,则该消息会通过该消息触发向所有已注册android设备的通知。 通知中心

起初,我不在乎消息本身的内容,我只想针对每条传入的消息触发通知。

我设法设置了IoT设备并将其连接到IoT中心。 我还设法设置了通知中心,并将其与android应用程序连接,以一种方式,当我在通知中心中使用“测试发送”时,便会在android设备上收到通知。

为了连接两端(IoT中心和通知中心),我尝试遵循以下教程: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函数来触发它们?

谢谢!

2 个答案:

答案 0 :(得分:0)

是的,您可以直接从传入的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中心功能绑定:https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-event-iot

答案 1 :(得分:0)

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

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

  1. 创建一个新的Function App
  2. Function App Settings中,将版本设置为~1enter image description here 请注意,对于新的Function App,设置版本的选项不会显示为灰色,您可以将其设置为〜1。
  3. 然后,按照问题中链接的指南进行操作。

如果使用的是Visual Studio,只需在创建函数时选择v1。 enter image description here

不幸的是,如Microsoft文档中所述,通知绑定不支持Function 2.x。