Azure SDK для Node JS не работает в рабочей роли Azure

Я использую этот фрагмент кода для вызова очереди служебной шины из моего файла node.js, работающего в рабочей роли Azure.

var azure = require('azure'),
    config = require('./config');
var serviceBusClient = azure.createServiceBusService(config.sbConnection);
console.log("Start");
serviceBusClient.getQueue("myqueue", function (error, queue) {
    if(error){
        console.log(error);
    }
   console.log(queue);
});
console.log("End");

В этой рабочей роли кода регистрируются только «начало» и «конец», но API getQueue не работает и не выдает никаких ошибок, и он отлично работает на моем локальном компьютере и регистрирует ответ.


person AvinashSachdewani    schedule 11.08.2016    source источник


Ответы (1)


Я протестировал новую облачную службу с вашим кодом сценария node.js и развернул ее в Azure. И я настроил файл .csdef для передачи вывода в файл журнала, например: <ProgramEntryPoint commandLine="node.cmd .\worker.js &gt; sblog.txt" setReadyOnProcessStart="true" /> для проверки вывода сценария node.js.

На моей стороне все работало нормально. Не могли бы вы подтвердить, есть ли у вас сообщения в вашей очереди и есть ли у вас какие-либо определенные конфигурации в вашем файле .csdef.

Обновить

Согласно описанию на странице https://azure.microsoft.com/en-us/documentation/articles/nodejs-specify-node-version-azure-apps/:

Если вы размещаете свое приложение в облачной службе Azure (веб-роль или рабочая роль) и развертываете приложение впервые, Azure попытается использовать ту же версию Node.js, которую вы установили в своей среде разработки. если он соответствует одной из версий по умолчанию, доступных в Azure.

И мы можем проверить доступную версию nodejs в облачном сервисе с помощью команды powershell: Get-AzureServiceProjectRoleRuntime. Список доступных версий: 0.6.17,0.6.20,0.8.4,0.8.22,0.8.26 и 0.10.21.

Если вы хотите использовать собственную версию nodejs, вы можете упаковать всю папку исполняемого приложения node.js в свое приложение облачной службы. И измените файл node.cmd в вашем приложении облачной службы, чтобы указать путь выполнения приложения node.js в вашем пакете облачной службы.

person Gary Liu    schedule 12.08.2016
comment
Да, сообщения доступны в очереди, и вот мой код файла .csdef. /Variable› ‹Имя переменной=EMULATED› ‹RoleInstanceValue xpath=/RoleEnvironment/Deployment/@emulated /› ‹/Variable› ‹/Environment› ‹EntryPoint› ‹ProgramEntryPoint commandLine=node.cmd .\check.js sblog.txt setReadyOnProcessStart= true /› ‹/EntryPoint› - person AvinashSachdewani; 12.08.2016
comment
еще один момент: я изменил версию узла в package.json, добавив эту строку (двигатели: {node: 4.4.7, iisnode: *}), а также запустил этот командлет (Set-AzureServiceProjectRole WebRole1 Node 4.4.7) перед публикацией приложения, но когда я запускаю команду (node ​​-v) в рабочей роли, она показывает 0.6.20, так какая версия node js применяется в приложении? - person AvinashSachdewani; 12.08.2016
comment
Является ли контент полностью вашим контентом в .csdef? Сможете ли вы создать новую облачную службу с использованием Visual Studio? - person Gary Liu; 16.08.2016
comment
Спасибо Гэри за поддержку. Теперь все работает. Я изменил версию узла JS на (0.10.21), а также добавил тег запуска в файл csdef. Но проблема заключалась в том, что сообщения об ошибке не поступало, поэтому проблему трудно отследить. - person AvinashSachdewani; 24.08.2016