0

我正在使用这段代码从使用 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 的方法是服务总线正确吗?

任何帮助,将不胜感激。

4

2 回答 2

1

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

loggingEnabled="true"

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

干杯

于 2012-09-07T23:20:13.390 回答
0

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

于 2012-09-07T21:35:42.840 回答