azure服务总线队列使用nodejs读取批量消息

时间:2018-05-31 11:40:20

标签: javascript node.js azure servicebus azure-servicebus-queues

我想使用node js azure包从azure服务总线队列中批量获取消息,现在我可以使用set-interval.is获取消息,还有其他任何方式来批量获取消息。

4 个答案:

答案 0 :(得分:1)

Service Bus REST API当前不支持接收批处理,因此此库中没有有效的实现。部分原因是REST实现不是特别高效,使用AMQP要好得多。如果你正在寻找性能更好的东西,我会看一下这个库:

https://github.com/noodlefrenzy/node-amqp10

github

上的相关问题

您也可以尝试 out

答案 1 :(得分:0)

可以批量查看ServiceBus队列中指定数量的消息。可以使用Node.js Azure包中的ServiceBusService上的receiveQueueMessage方法(仅支持一次仅接收一条消息)从队列接收消息。默认情况下,将在读取邮件时将其从队列中删除,但是当以偷看模式接收时,通过将可选参数isPeekLock设置为true可以防止删除

使用Azure ServiceBus的前提条件:

  1. Node.js Azure软件包,可以使用命令npm install azure
  2. 安装
  3. 环境变量AZURE_SERVICEBUS_CONNECTION_STRING,其中包含Azure模块连接到ServiceBus队列所需的信息

下面是接收10条消息的示例代码,

//Import the module

 var azure = require('azure');

 //Create ServiceBusService object

 var serviceBusService = azure.createServiceBusService();

 var receivedMessages = [];

 while(i<10){

    serviceBusService.receiveQueueMessage('myqueue', { isPeekLock: true }, 
    function(error, lockedMessage){

        if(!error){
           // Message received and locked    
           receivedMessages.push(lockedMessage)    
        }
    }
 });

 Console.log(receivedMessages);

答案 2 :(得分:0)

尝试使用@azure/service-bus软件包,该软件包具有用于批量接收消息的api。这将等待的最大批次大小和最长时间作为输入。您将获得所需的消息数或在提供的时间内获取的消息数。检出示例receives messages in a loop

const sbClient = new ServiceBusClient(connectionString);
const queueReceiver = sbClient.createReceiver(queueName);
const messages = await queueReceiver.receiveMessages(10);

答案 3 :(得分:0)

您可以使用https://www.npmjs.com/package/@azure/service-bus

以下是示例代码,可用于创建接收器对象,然后获取多条消息:

let receivingMode = ReceiveMode.peekLock;//Or receiveAndDelete
let sbClient = ServiceBusClient.createFromConnectionString(connectionString);  
let subscriptionClient = this.sbClient.createSubscriptionClient(topicName, subscriptionName);
let receiver = this.subscriptionClient.createReceiver(receivingMode);
let messages = await this.receiver.receiveMessages(maxMessageCount, maxWaitTimeInSeconds);

例如,如果maxMessageCount = 10且maxWaitTimeInSeconds = 60,则表示该函数将在10条消息后立即返回10条消息,如果等待60秒则仍将返回。