2017-09-28 3 views
0

Ich habe bereits geforscht, konnte aber nicht herausfinden, wie Sie in Nodejs einen Azure Service Bus-Warteschlangenlistener erstellen.Azure Service Bus-Warteschlangenlistener - NodeJs

Die einzige Möglichkeit, die ich bisher gefunden habe, ist die Verwendung des Microsoft Azure SDK für Node.js, um eine Nachricht per Nachricht an die Warteschlange zu senden, die nicht kosteneffizient ist. Jede Hilfe wird geschätzt.

sbService.receiveQueueMessage(queueName, { isPeekLock: true }, function(err, lockedMessage) { 

    if (err) { 
     if (err === 'No messages to receive') { 
      console.log('No messages'); 
     } else { 
      callback(err); 
     } 
    } else { 
     callback(null, lockedMessage); 
    } 
}); 
+0

Kontrolle dieser Probe, verwendet es eine setInterval einen Zuhörer zu schaffen: https://github.com/Azure/azure-sdk -für-Knoten/Baum/master/lib/services/serv iceBus – Thomas

Antwort

1

Für Ihr Szenario, würde ich mit Azure Functions empfehlen, die einen Service Bus Queue-Trigger, mit denen Sie Ihren Code auf andere Azure Services oder On-Premise-Dienste durch das Hören auf Nachrichtenwarteschlangen verbinden können. Weitere Informationen finden Sie unter Service Bus bindings.

enter image description here

+0

das kann mein Problem lösen, ich werde nur warten, um zu sehen, ob jemand anderes eine Lösung hat, die ich verwenden kann, um Warteschlange anzuhören, ohne die Azure-Funktion erstellen zu müssen. – vilelam

0

Als @ aaron-chen sagte, einfachste Lösung Azure Function mit einem Servicebus-Trigger (ohne zusätzliche langweilig Code ...)

Wenn Sie nicht Azure Function verwenden können, benutzen können Sie verwenden sie die azure sdk for node.js, die ich gefunden habe diese sample ihre Repo bilden einen Zuhörer zu schaffen:

var azure = require('azure-sb'); 

function checkForMessages(sbService, queueName, callback) { 
    sbService.receiveQueueMessage(queueName, { isPeekLock: true }, function (err, lockedMessage) { 
     if (err) { 
      if (err == 'No messages to receive') { 
       console.log('No messages'); 
      } else { 
       callback(err); 
      } 
     } else { 
      callback(null, lockedMessage); 
     } 
    }); 
} 

function processMessage(sbService, err, lockedMsg) { 
    if (err) { 
     console.log('Error on Rx: ', err); 
    } else { 
     console.log('Rx: ', lockedMsg); 
     sbService.deleteMessage(lockedMsg, function(err2) { 
      if (err2) { 
       console.log('Failed to delete message: ', err2); 
      } else { 
       console.log('Deleted message.'); 
      } 
     }) 
    } 
} 

var idx = 0; 
function sendMessages(sbService, queueName) { 
    var msg = 'Message # ' + (++idx); 
    sbService.sendQueueMessage(queueName, msg, function (err) { 
     if (err) { 
      console.log('Failed Tx: ', err); 
     } else { 
      console.log('Sent ' + msg); 
     } 
    }); 
} 

var connStr = process.argv[2] || process.env.CONNECTION_STRING; 
if (!connStr) throw new Error('Must provide connection string'); 
var queueName = 'sbqtest'; 

console.log('Connecting to ' + connStr + ' queue ' + queueName); 
var sbService = azure.createServiceBusService(connStr); 
sbService.createQueueIfNotExists(queueName, function (err) { 
    if (err) { 
     console.log('Failed to create queue: ', err); 
    } else { 
     setInterval(checkForMessages.bind(null, sbService, queueName, processMessage.bind(null, sbService)), 5000); 
     setInterval(sendMessages.bind(null, sbService, queueName), 15000); 
    } 
});