在Bluemix中,我有一个java_buildpack应用程序,它当前从Message Hub主题中获取/使用消息,现在我想重新格式化该消息并将其发布到Mqtt客户端。我有物联网平台服务绑定到我的java_buildpack应用程序,我创建了一个设备类型,javaDevice和设备ID,javaDevice01。
这是我的iotf服务的环境变量:
" iotf-service":[{" name":"物联网平台 - 或","标签":&# 34; iotf-service","计划":" iotf-service-free","凭证":{ " iotCredentialsIdentifier":" a2g6k39sl6r5"," mqtt_host": " qzfiiy.messaging.internetofthings.ibmcloud.com"," mqtt_u_port":1883, " mqtt_s_port":8883," base_uri": " https://qzfiiy.internetofthings.ibmcloud.com:443/api/v0001&#34 ;, " http_host":" qzfiiy.internetofthings.ibmcloud.com"," org":" qzfiiy", " apiKey":" xxxxxxxxxxxxxxx"," apiToken":" xxxxxxxxxxxxxx" }}
当我创建MqttClient的实例时,我应该传递什么:
MqttClient mqttClient = new MqttClient(broker, clientId, persistence);
我以为我在clientId的某个地方读过它应该是这样的:
A:qzfiiy:javaDevice:javaDevice01
经纪人应该传递什么?我是否使用此环境变量 - "mqtt_host": "qzfiiy.messaging.internetofthings.ibmcloud.com",
非常感谢任何帮助。
谢谢!
答案 0 :(得分:3)
如果您要作为应用程序进行连接,请使用应用程序条件。如果作为设备连接,请使用设备标准(见下文)。
对于DEVICE:使用以下格式的客户端ID进行身份验证
d:$org:$type:$id
MQTT客户端ID必须为d:$ org:$ type:$ id
MQTT用户名必须是use-token-auth
MQTT密码必须是身份验证令牌:身份验证令牌(例如:MP $ 08VKz!8rXwnR-Q *)
APPLICATION使用以下格式的客户端ID进行身份验证:
a:$org:$appId
使用API密钥进行MQTT连接时,以下情况适用:
MQTT客户端ID:a:$ org:$ appId
MQTT用户名必须是API密钥:a:$ org:apikeyvalue
MQTT密码必须是身份验证令牌:APItoken
如果您需要主题,那么如下所示。
对于应用程序,事件主题为iot-2 / type / {device type} / id / {device id} / evt / {event type} / fmt / {format type}
对于应用程序,命令主题是iot-2 / type / {device type} / id / {device id} / cmd / {command type} / fmt / {format type}
对于设备,事件主题是iot-2 / evt / {event type} / fmt / {format type}
对于命令,命令主题为iot-2 / cmd / {command type} / fmt / {format type}
您可以参考文档以获取更多信息。 https://iotf.readthedocs.org/en/latest/?cm_mc_uid=41893914391914121143444&cm_mc_sid_50200000=1460668601
您还可以使用封装所有功能的Java客户端库并提供包装API https://github.com/ibm-messaging/iot-java/releases?cm_mc_uid=41893914391914121143444&cm_mc_sid_50200000=1460668601
对于MQTT代理,您需要使用{orgid} .messaging.internetofthings.ibmcloud.com