2017-09-28 1 views
0

J'ai déjà recherché mais je n'ai pas trouvé comment créer un écouteur de file d'attente Azure Service Bus dans Nodejs. La seule façon que j'ai trouvé jusqu'ici est d'utiliser le Microsoft Azure SDK pour Node.js pour demander un message par message à la file d'attente qui n'est pas rentable. Toute aide serait appréciée.Listening de file d'attente de bus de service Azure - NodeJs

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

vérifier cet échantillon, il utilise un setInterval pour créer un écouteur: https://github.com/Azure/azure-sdk -for-node/arbre/maître/lib/services/serv iceBus – Thomas

Répondre

1

Pour votre scénario, je vous recommande d'utiliser Azure Functions qui fournit une file d'attente Trigger Bus Service qui vous permet de connecter votre code à d'autres services Azure ou sur site des services en écoutant les files d'attente de messages. Pour plus d'informations, voir Service Bus bindings.

enter image description here

+0

qui peut résoudre mon problème, je vais juste attendre de voir si quelqu'un d'autre a une solution que je peux utiliser pour écouter la file d'attente sans avoir besoin de créer la fonction Azure. – vilelam

0

Comme @ aaron-chen dit, la solution la plus simple consiste à utiliser Azure Function avec un déclencheur Servicebus (pas de code ennuyeux supplémentaire ...)

Si vous ne pouvez pas utiliser Azure Function, vous pouvez utiliser le azure sdk for node.js, j'ai trouvé cette sample forme leur repo pour créer un auditeur:

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); 
    } 
});