簡體   English   中英

Azure + Node Js Service總線持久訂閱主題

[英]Azure + Node Js Service bus persistent subscription of topic

使用節點js我想為Azure服務總線服務主題創建持久訂閱。 現在它只執行一次。 請指導我,我是新手。 提前致謝。 我使用以下代碼訂閱主題。

var azure = require('azure');

var azureConnection = "Endpoint=sb:My connection string"

var retryOperations = new azure.ExponentialRetryPolicyFilter();
var serviceBusService = azure.createServiceBusService(azureConnection).withFilter(retryOperations);

serviceBusService.receiveSubscriptionMessage('mytopic01', 'mytopicsub', function (error, receivedMessage) {

    if (!error) {
        // // // Message received and deleted
        console.log(receivedMessage);
    }
});

另外我不想使用setInterval函數。 我想解決如果消息發布到主題它應該自動觸發訂閱。

實際上,如果您的客戶端應用程序是一個獨立的node.js應用程序,我們通常會設置一個循環程序來循環接收來自服務總線的消息。 例如

var azure = require('azure');
var sbService = azure.createServiceBusService(<connection_string>);
function checkForMessages(sbService, queueName, callback) {
  sbService.receiveSubscriptionMessage(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.');
      }
    })
  }
}
setInterval(checkForMessages.bind(null, sbService, queueName, processMessage.bind(null, sbService)), 5000);

您可以參考Azure Team提供的GitHub中的類似方案中的代碼示例。

如有任何疑問,請隨時告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM