【发布时间】:2017-01-01 17:36:24
【问题描述】:
我正在使用此代码从队列接收消息:
function startReceiver(){
serviceBusService.getQueue(configurations.queueForRequest, function(err, queue){
if(!err){
var length = queue.CountDetails['d2p1:ActiveMessageCount'];//get count of active messages
if(length > 0) {
serviceBusService.receiveQueueMessage(configurations.queueForRequest, {isPeekLock:true},
function(error, lockedMessage){ HandleMessage(error, lockedMessage) });
return; //get out from this method
}
}
else{
console.log('Can not get queue');
}
setTimeout(startReceiver, 3000);//if err or there are no messages then call this method later
});
}
function handleMessage(err, msg){
var result;
if (!err){
serviceBusService.deleteMessage(msg, function(deleteError){
if(deleteError) {
console.log('Can not delete the message')
}
else{
console.log('Msg has been deleted');
}
});//delete the message which has been received
try{
result = GetResult(msg.body)
}
catch (er){
result = GetResultWhenExp();
}
finally{
sendMessage(result); //send a response
startReceiver(); //repeat a receiver loop
}
}//!error
else{console.log('Error occured: '+err);
setTimeout(startReceiver, 3000); //repeat a receiver loop later
}
}
问题是我只能在第一次运行 handleMessage() 时收到一条消息。进一步的 startReceiver() 可以获得正确的活动消息计数,但 handleMessage() 总是得到未定义的 msg 作为参数(即 serviceBusService.receiveQueueMessage() 失败,err 是“没有消息接收”)。
使用带有标准函数的 C# 库来接收消息效果很好。
这里有什么问题?请帮忙
编辑:我只是从 azure-sdk-for-node 存储库复制粘贴 this example,在我的情况下,它会产生相同的行为:已成功接收到第一条消息,但是遵循对 Bus 的请求返回“没有要接收的消息”
【问题讨论】:
-
嗨@Mergasov,还有更新吗?
-
@Gary Liu - MSFT,我在这里忘记了答案,抱歉。问题是我有一个过时的 node js 包。当我更新它时,我的代码是有效的。
标签: javascript azure azureservicebus