node.js - 在 Node.js 上收到 "changing"+ "changed"事件后,Azure 辅助角色重新启动

标签 node.js azure

我正在 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');
});

该应用程序在辅助角色上运行良好,没有任何问题,直到我通过管理门户修改配置。

我通过管理门户更新了配置并单击“保存”。不久之后,我在应用程序上同时收到了 changedchanged 事件。但在收到这些事件 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 事件。

所以有几个问题:

  1. 为什么配置更改后角色会重新启动?
  2. 如何防止角色在配置更改后重新启动?
  3. 为什么当角色因配置更改而重新启动时,没有停止事件?

谢谢!

最佳答案

  1. Azure 假定您希望在更改配置后重新启动服务器,以便新设置可以正确生效。它不知道您是否在运行时或仅在启动时继续读取配置设置。它还假设您的角色中部署了 2 台以上服务器,一次重新启动一台服务器不会损害您的网站

  2. 所以,我不熟悉node.js,但是,在.NET中,我们可以监视RoleEnvironment.Changing事件,捕获它并忽略它的重新启动。查看这篇文章:http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.serviceruntime.roleenvironment.changing.aspx在捕获变化事件后,您可以对函数委托(delegate)执行类似的操作吗?

  3. 我相信停止事件仅在您关闭/停止角色时才适用。 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/

相关文章:

node.js - docker容器构建期间Npm安装错误

javascript - 如何从 df ~ 提取数据到我的网站?

javascript - 未找到类组件函数

spring-boot - Azure Spring Cloud AppConfiguration刷新不起作用

azure - 如何隐藏 Select-AzureRmSubscription 的控制台输出

python - 成功更新资源后,我收到 JSON 解码错误

javascript - 是否有用于 Node 的 window.DOMParser() 的 polyfill

javascript - 每次重新加载后,Node.js Web 应用程序 chrome 内存使用量都会增加

azure - 将 .html 添加到 Azure web.config 重写中的 url

Azure辅助角色装配位置