如何在node.js中异步接收azure服务总线消息

时间:2013-06-14 13:10:33

标签: c# node.js azure azureservicebus azure-servicebus-queues

我在node.js中有socket.io,在.net中有我的worker角色。我正在从socket.io发送服务总线队列消息到worker角色,在worker角色中我正在进行一些处理并通过服务总线队列将数据发送回socket.io。

但我认为有时socket.io尝试比工作者角色可以发送的更早地接收服务总线队列消息,因此即使worker角色发送了消息,socket.io也不会接收它。

以下是我的代码:

function requestQueue(channelName) {

sleepTime[channelName] = 0;    

console.log("-------------------SEND to WORKER ROLE------------------------");

// send the request to worker role
var broadcastMessage = "somedata";    

sendMessage(socketToWorkerRole, broadcastMessage)

receivePeriodicRecordsQueue(workerRoleToSocket, channelName);
}

//发送服务总线队列消息

function sendMessage(queue, data) {   

serviceBusService.sendQueueMessage(queue, data, function (error) {
    if (!error) {
        console.log('Message sent....');
    }
})
}

//接收服务总线队列消息

function receivePeriodicRecordsQueue(queue, channelName) {

serviceBusService.receiveQueueMessage(queue, function (error, receivedMessage) {
    if (!error) {
        if (receivedMessage != null) {        

            // some processing
        }
        else {
            console.log("---Service Bus Message is EMPTY-----");
            receivePeriodicRecordsQueue(workerRoleToSocket, channelName);
        }
    }
    else {
        console.log(error);
        receivePeriodicRecordsQueue(workerRoleToSocket, channelName);
    }
})

}

即使我已经将代码放在每当receiveMessage为空或接收消息时出错时再次接收消息,它也不会进入该部分。它始终只是在控制台中打印自定义消息“无消息接收”。不知道我能处理的那个。

在node.js中使用服务总线是一个真正的问题,因为我无法确定地接收消息。如果有人有任何解决方案或解决此问题,请告诉我?

谢谢

4 个答案:

答案 0 :(得分:0)

“无消息接收”的情况实际上是作为错误返回的,因此您将从逻辑的错误分支中获取该消息。您应该检测到确切的字符串并重试。

否则,你的逻辑看起来基本正确。你确定在重试接收时定义了workerRoleToSocket吗?你的参数名称是“队列”似乎有点令人困惑,但是当你在错误之后再次调用时,你传递了workerRoleToSocket而不是队列。

答案 1 :(得分:0)

行console.log(错误);是抛出错误的地方。处理它。

答案 2 :(得分:0)

因此,您正在尝试接收没有的消息。 对于这种情况,您可以参考使用@azure/service-bus SDK第7版的receiveMessagesStreaming.ts示例代码。

我知道这是一个较晚的答复,但是以防万一有人遇到旧的服务总线节点SDK的问题并降落在此处,请参阅下面的链接。

@azure/service-bus的最新版本7.0.0基于AMQP。

答案 3 :(得分:0)

因此,您正在尝试接收没有的消息。 对于这种情况,您可以参考使用@azure/service-bus SDK第7版的receiveMessagesStreaming.ts

我知道这是一个较晚的答复,但是以防万一有人遇到旧的服务总线节点SDK的问题并降落在此处,请参阅下面的链接。

@azure/service-bus的最新版本7.0.0基于AMQP。