简体   繁体   English

Azure + Node Js Service总线持久订阅主题

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

Using node js i want to create persistent subscription for Azure service bus service topic. 使用节点js我想为Azure服务总线服务主题创建持久订阅。 right now it is execute only once. 现在它只执行一次。 Please guide me I am new to this. 请指导我,我是新手。 Thanks in advance. 提前致谢。 I am using following code to subscribe topic. 我使用以下代码订阅主题。

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

Also I don't want to use setInterval function. 另外我不想使用setInterval函数。 I want to solution if message publish to the topic it should automatically trigger subscription. 我想解决如果消息发布到主题它应该自动触发订阅。

Actually, if your client application is an independent node.js application, we usually set up a cycle program to receive message from service bus in loop. 实际上,如果您的客户端应用程序是一个独立的node.js应用程序,我们通常会设置一个循环程序来循环接收来自服务总线的消息。 EG 例如

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

You can refer to the code sample in the similar scenario at GitHub provided by Azure Team. 您可以参考Azure Team提供的GitHub中的类似方案中的代码示例。

Any further concern, please feel free to let me know. 如有任何疑问,请随时告诉我。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM