我在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中使用服务总线是一个真正的问题,因为我无法确定地接收消息。如果有人有任何解决方案或解决此问题,请告诉我?
谢谢
答案 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。