我正在尝试使用 MQTT 直接连接到 Azure IoT 中心来发布消息。 为此,我尝试了多个软件包,但无法成功连接。
react-native-mqtt-clients、sp-react-native-mqtt、mqtt、@ko-developerhong/react-native-mqtt但不工作。
这是使用 sp-react-native-mqtt 的代码参考之一。
export const connectToMQTT = async (iotHubName, deviceId, sasToken) => {
const user = `${iotHubName}/${deviceId}/?api-version=2021-04-12`;
MQTT.createClient({
// uri: `mqtts://${iotHubName}:8883`,
clientId: deviceId,
username: user,
pass: sasToken,
protocol: 'mqtts',
host: iotHubName,
port: 8883,
keepalive: 60,
})
.then(function (client) {
client.on('closed', function () {
console.log('mqtt.event.closed');
});
client.on('error', function (msg) {
console.log('mqtt.event.error', msg);
});
client.on('message', function (msg) {
console.log('mqtt.event.message', msg);
});
client.on('connect', function () {
console.log('connected');
client.subscribe('/data', 0);
client.publish('/data', 'test', 0, false);
});
client.connect();
})
.catch(function (err) {
console.log(err);
});
};
任何意见都会有帮助,谢谢
我的猜测是您使用的 SAS 令牌有问题。这是一个非常简单的示例,使用 mqtt 包连接到 IoT 中心。我使用 Azure CLI 生成了 SAS 令牌:
import mqtt from 'mqtt';
const client = mqtt.connect('mqtt://YOUR_HUB_NAME.azure-devices.net', {
username: 'YOUR_HUB_NAME.azure-devices.net/YOUR_DEVICE_ID/?api-version=2021-04-12',
// Create a SAS token to use as the password. For example, using the Azure CLI:
// az iot hub generate-sas-token --hub-name YOUR_HUB_NAME --device-id YOUR_DEVICE_ID
password: 'SharedAccessSignature sr=YOUR_HUB_NAME.azure-devices.net%2Fdevices%2FYOUR_DEVICE_ID&sig=ZRC...%3D&se=1719309346',
clientId: 'YOUR_DEVICE_ID',
protocol: 'mqtts',
port: 8883
});
client. On('connect', (err) => {
console.log('Connected');
});
client. On('error', (err) => {
console.log('Error: ', err);
});
如果您还没有找到它,这里有大量有关直接通过 IoT 中心使用 MQTT 的信息:https://learn.microsoft.com/azure/iot/iot-mqtt-connect-to-iot-hub