我尝试使用Azure IoT Hub Device SDK for Node来收听新的blob-in-storage-account事件(或者其他任何正式调用的事件)。我跟随this sample。
我已收到通知:
但是,当我向该容器添加文件时,客户端SDK什么都没有。
client.on('message', function (msg) {
// message event does not fire
console.log('Id: ' + msg.messageId + ' Body: ' + msg.data);
}
如果我发送云设备消息(也是来自门户网站刀片),它会很好地通过,我可以在console.log()
中阅读。
我在听完全错误的事件 - message
吗?
答案 0 :(得分:0)
看起来您希望在云到设备的消息通道上接收文件上传通知。这不是这些通知浮出水面的地方。
Azure IoT Hub有两种类型的SDK:设备 SDK和服务 SDK。
在设备 SDK中完成上传后,将调用uploadToBlob
方法的回调。
var Protocol = require('azure-iot-device-mqtt').Mqtt;
var Client = require('azure-iot-device').Client;
var fs = require('fs');
var filePath = '[path/to/file]';
var client = Client.fromConnectionString(deviceConnectionString, Protocol);
fs.stat(filePath, function (err, fileStats) {
var fileStream = fs.createReadStream(filePath);
client.uploadToBlob('testblob.txt', fileStream, fileStats.size, function (err, result) {
if (err) {
console.error('error uploading file: ' + err.constructor.name + ': ' + err.message);
} else {
console.log('Upload successful - ' + result);
}
fileStream.destroy();
});
});
如果要在设备将文件上载到Blob时侦听通知,则需要使用 Service SDK。使用客户端获取“文件通知接收器”,然后监听此对象的“消息”事件。
var Client = require('azure-iothub').Client;
var client = Client.fromConnectionString(connectionString);
client.open(function (err) {
if (err) {
console.error('Could not connect: ' + err.message);
} else {
console.log('Client connected');
client.getFileNotificationReceiver(function(err, receiver) {
if(err) {
console.error('Could not get file notification receiver: ' + err.message);
} else {
receiver.on('message', function(msg) {
console.log('File uploaded: ');
console.log(msg.data.toString());
receiver.complete(msg, function(err) {
if (err) {
console.error('Could not complete the message: ' + err.message);
} else {
console.log('Message completed');
}
});
});
}
});
}
});
答案 1 :(得分:0)