【问题标题】:Azure SDK causes Node.js service bus call to run slowAzure SDK 导致 Node.js 服务总线调用运行缓慢
【发布时间】:2012-09-08 07:20:13
【问题描述】:

我正在使用这段代码从使用 web 矩阵在本地运行的 node.js 服务器调用服务总线队列,我还上传到 windows azure“网站”,但它仍然执行缓慢。

var sb1 = azure.createServiceBusService(config.serviceBusNamespace, config.serviceBusAccessKey);
sbMessage = {
    "Entity": {
        "SerialNumbersToCreate": '0',
        "SerialNumberSize": config.usageRates[3],
        "BlobName": 'snvideos' + channel.ChannelTableName,
        "TableName": 'snvideos' + channel.ChannelTableName
    }
};

sb1.getQueue('serialnumbers', function(error, queue){
    if (error === null){
        sb1.sendQueueMessage('serialnumbers', JSON.stringify(sbMessage), function(error) {
            if (!error)
                res.send(req.query.callback + '({data: ' + JSON.stringify({ success: true, video: newVideo }) + '});');
            else 
                res.send(req.query.callback + '({data: ' + JSON.stringify({ success: false }) + '});');
        });
    }
    else res.send(req.query.callback + '({data: ' + JSON.stringify({ success: false }) + '});');
});

在服务器将返回结果返回给客户端之前,最长可能需要 5 秒。当我注释掉 sb1.getQueue('serialnumbers', function(error, queue){ 并让它返回而不发送队列消息时,它会在不到 1 秒的时间内执行。为什么会这样?我使用 azure sdk 的方法是服务总线正确吗?

任何帮助将不胜感激。

【问题讨论】:

    标签: node.js azure sdk


    【解决方案1】:

    感谢马克的回复。我遇到的问题与 IISNode 有关,显然如果有人在他们的程序中使用 console.log,那么 IISNode 最终会在某个阶段崩溃。如果您不时调整此设置,请在 web.config 中:

    loggingEnabled="true"
    

    设置为 false 不再发生崩溃,队列调用正常工作。我应该指出我所有的队列调用都是在同一个线程中完成的,我有一个 cron 作业检查队列中的消息,因此当 IISNode 崩溃并再次重新启动时,它看起来好像队列以某种方式延迟了。

    干杯

    【讨论】:

      【解决方案2】:

      在这种情况下,您的 getQueue 调用确实不是很实用,因为您没有使用输出,您可以尝试 CreateQueueIfNotExists,看看是否存在性能差异

      【讨论】:

        猜你喜欢
        • 2015-02-13
        • 2015-06-08
        • 2014-12-21
        • 2014-03-29
        • 2020-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-28
        相关资源
        最近更新 更多