我正在尝试使用Microsoft Azure IOT Hub来演示将我的设备连接到IOT Hub并使用mqtt协议发送消息。 我有一个帐户,并根据需要创建了设备和带有TTL的SAS。我使用microsoft azure给出的java客户端SDK进行连接,但我的连接未经授权。 我已按照以下网址中的所有步骤操作: https://azure.microsoft.com/en-us/documentation/articles/iot-hub-mqtt-support/ 在这方面请帮助我。我的日志如下:
日志:
MqttIotHubConnection.open() connectionOptions=
============== Connection options ==============
CleanSession : false
SocketFactory : null
MqttVersion : 4
KeepAliveInterval : 20
ConTimeout : 30
UserName : PCSIOTHub.azure-devices.net/MQ...
SSLProperties : null
WillDestination : null
Exception in thread "main" java.io.IOException: Error initializing MQTT connection:Not authorized to connect
at com.microsoft.azure.iothub.transport.mqtt.MqttIotHubConnection.open(MqttIotHubConnection.java:142)
at com.microsoft.azure.iothub.transport.mqtt.MqttTransport.open(MqttTransport.java:83)
at com.microsoft.azure.iothub.DeviceClient.open(DeviceClient.java:163)
at samples.com.microsoft.azure.iothub.SendReceive.main(SendReceive.java:210)
答案 0 :(得分:1)
如果您正在使用IoT Hub的Microsoft Java客户端,则无需自行创建SAS令牌,SDK会为您执行此操作。
如果您按照此处的示例https://azure.microsoft.com/en-us/documentation/articles/iot-hub-java-java-getstarted/#create-a-simulated-device-app,您需要做的就是替换:
private static IotHubClientProtocol protocol = IotHubClientProtocol.AMQPS;
使用:
private static IotHubClientProtocol protocol = IotHubClientProtocol.MQTT;
您将拥有一个可以通过MQTT与IoT Hub通信的基本Java客户端。
答案 1 :(得分:1)
正如@DominicBetts所说,在使用IoTHub SDK for Java时,您不需要创建SAS令牌。有关IoTHub安全性的更多解释,请参阅官方文档Azure IoT Hub developer guide
。
作为示例的参考,您可以参考GitHub上的example以了解如何使用不同的Java协议发送消息。