我正在 Azure 辅助角色中运行一个简单的 Node.js 应用程序,使用 azure-sdk-for-node包。
var azure = require('azure'),
http = require('http'),
winston = require('winston'),
logger = new (winston.Logger)({
transports: [ new (winston.transports.File)({ filename: 'C:\\log.txt' }) ]
}),
http.createServer(function (req, res) {
res.writeHead(200);
res.end('Hello, World!');
}).listen(process.env.port || 1337);
azure.RoleEnvironment.on('changing', function (changes) {
winston.info('changing', changes);
// Got configuration changes here
// {
// "changes": [
// {
// "type": "ConfigurationSettingChange",
// "name": "MyApp.Settings1"
// },
// {
// "type": "ConfigurationSettingChange",
// "name": "Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountExpiration"
// }
// ]
// }
});
azure.RoleEnvironment.on('changed', function () {
// Also got this event
winston.info('changing');
});
azure.RoleEnvironment.on('stopping', function () {
// Never fired
winston.info('stopping');
});
该应用程序在辅助角色上运行良好,没有任何问题,直到我通过管理门户修改配置。
我通过管理门户更新了配置并单击“保存”。不久之后,我在应用程序上同时收到了 changed
和 changed
事件。但在收到这些事件 6 分钟后,整个工作角色重新启动,没有任何 stopping
事件。我用过包winston记录到 C:\并在重新启动后保留该日志。
日志显示如下:
00:00 setup_worker.cmd
00:01 server.js with PID 1
00:06 "role changing"
00:06 "role changed"
00:12 setup_worker.cmd
00:13 server.js with PID 2
(注意:setup_worker.cmd是CSDEF中的启动脚本,server.js是我的应用程序)
虽然配置更改后没有 stopping
事件,但如果我通过管理门户手动重新启动实例,我就会收到 stopping
事件。
所以有几个问题:
- 为什么配置更改后角色会重新启动?
- 如何防止角色在配置更改后重新启动?
- 为什么当角色因配置更改而重新启动时,没有
停止
事件?
谢谢!
最佳答案
Azure 假定您希望在更改配置后重新启动服务器,以便新设置可以正确生效。它不知道您是否在运行时或仅在启动时继续读取配置设置。它还假设您的角色中部署了 2 台以上服务器,一次重新启动一台服务器不会损害您的网站
所以,我不熟悉node.js,但是,在.NET中,我们可以监视RoleEnvironment.Changing事件,捕获它并忽略它的重新启动。查看这篇文章:http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.serviceruntime.roleenvironment.changing.aspx在捕获变化事件后,您可以对函数委托(delegate)执行类似的操作吗?
我相信停止事件仅在您关闭/停止角色时才适用。 http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.serviceruntime.roleenvironment.stopping.aspx
关于node.js - 在 Node.js 上收到 "changing"+ "changed"事件后,Azure 辅助角色重新启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25717017/