【问题标题】:Watson IoT & Node.JS - Continuous retry & connection failureWatson IoT 和 Node.JS - 连续重试和连接失败
【发布时间】:2017-06-29 10:54:25
【问题描述】:

背景:我正在创建一个 Node.js Web 应用程序来模拟设备并将事件发布到在 Watson IoT Platform 中注册的 Node-Red 应用程序和设备。

Node red Application 订阅事件并执行自定义逻辑。

作为 Node.js Web 应用程序的一部分,在单击 Web 应用程序中的提交按钮时,我正在提交一个带有文本框值的发布请求。我正在 app.js 中处理请求并发布事件

问题:当我第一次提交请求时,它工作得很好。但是从第二次开始,它不断尝试重新连接并重复发布事件

App.js 代码 --> Post 方法部分

app.post('/status/data', function(req, res) {    console.log("3rd param is " + req.body.eid);      application.connect();   console.log("Successfully connected to our IoT service!");      application.on("connect", function () {         console.log("About to publish data ");        application.publishDeviceEvent(deviceType, deviceId, eventType, eventFormat, eventData);         console.log("published data ");    });     res.writeHead(200, "OK", {'Content-Type': 'text/plain'});   res.end();       }); 

首次发布请求 - 日志详细信息

2017 年 6 月 29 日 04:12:47.346 PM APP/PROC/WEB/0 第三个参数是 111111 Jun 2017 年 2 月 29 日 04:13:04.785 PM APP/PROC/WEB/0 [BaseClient:connect] 使用主机连接到 IoTF: ssl://9z9mtd.messaging.internetofthings.ibmcloud.com:8883 2017 年 6 月 29 日 04:13:04.786 PM APP/PROC/WEB/0 成功连接到我们的物联网 服务! 2017-06-29 04:13:04.814 PM APP/PROC/WEB/0 即将发布 数据 2017 年 6 月 29 日下午 4:13:04.855 APP/PROC/WEB/0 [ApplicationClient:publish] 发布: iot-2/type/CardSim/id/EB27FNW/evt/update/fmt/json, {“d”:{“eid”:222261,“loc”:1234}},QoS:0 2017 年 6 月 29 日 04:13:04.855 PM APP/PROC/WEB/0 发布数据 2017 年 6 月 29 日 04:13:04.855 PM APP/PROC/WEB/0 [ApplicationClient:connect] ApplicationClient 已连接 2017 年 6 月 29 日 04:13:04.855 PM RTR/1

第二次 POst 请求 - 日志详细信息

PP/PROC/WEB/0 第三个参数是 222222 Jun 29, 2017 04:13:52.891 PM APP/PROC/WEB/0 [BaseClient:connect] 通过主机连接到 IoTF: ssl://9z9mtd.messaging.internetofthings.ibmcloud.com:8883 2017 年 6 月 29 日 04:13:52.891 PM RTR/0 cardreaderapp.mybluemix.net - [2017-06-29T10:43:52.857+0000]“POST /status/data HTTP/1.1”200 10 0 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 火狐/45.0" "108.168.250.151:18180" "169.47.199.84:63789" x_forwarded_for:"167.230.96.8" x_forwarded_proto:"https" vcap_request_id:“0801beea-5ab8-434b-403d-6c5cc92e9aad” 响应时间:0.050970748 app_id:"0cdbfec6-ac2a-4be1-9bab-3b1933ba3c57" app_index:"0" x_global_transaction_id:"1003954655" x_b3_traceid:"920cb5951fe2dee3" x_b3_spanid:"920cb5951fe2dee3" x_b3_parentspanid:"-" 2017 年 6 月 29 日 04:13:52.908 PM APP/PROC/WEB/0 成功连接到我们的物联网 服务! 2017 年 6 月 29 日下午 4:13:52.895 APP/PROC/WEB/0 [BaseClient:onClose] 连接已关闭。 2017 年 6 月 29 日 04:13:52.929 PM APP/PROC/WEB/0 [BaseClient:connect] Iotfclient 离线。重试 连接 2017 年 6 月 29 日 04:13:52.928 PM APP/PROC/WEB/0 [BaseClient:connect] 3 秒后重试。计数 : 1 2017 年 6 月 29 日 04:13:52.928 PM APP/PROC/WEB/0 [ApplicationClient:connect] ApplicationClient 已连接 2017 年 6 月 29 日下午 4:13:52.930 APP/PROC/WEB/0 即将发布数据 Jun 29, 2017 04:13:53.972 PM APP/PROC/WEB/0 [ApplicationClient:publish] 发布: iot-2/type/CardSim/id/EB27FNW/evt/update/fmt/json, {"d":{"eid":222261,"loc":1234}},服务质量:0

这个过程不断重复。请帮忙

【问题讨论】:

  • 已经能够通过提供配置类型Shared来解决重复的重试和连接问题。但是每次提交后,所有旧的细节也会再次发布。请帮忙。

标签: node.js iot watson-iot


【解决方案1】:

对于您的应用程序的每个 POST,您都在(重新)连接到 IoTP 并注册一个 on-connect() 回调。

您应该在处理 POST 的函数(如 app init)之外连接并注册任何连接时回调(不是发布 POST 数据的回调!),而不是采用这种方式。

在 POST 函数中,您唯一需要做的就是调用publishDeviceEvent()

注意publishDeviceEvent() 当然是异步的,所以它可能在函数返回时实际上并未发布。您可以通过传入一个回调来等待它,然后它会通过 res.end() 响应调用者并写入标头。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    相关资源
    最近更新 更多