【问题标题】:azure service bus queue read bulk message using nodejs天蓝色服务总线队列使用nodejs读取批量消息
【发布时间】:2020-12-09 07:32:05
【问题描述】:

我想使用 node js azure 包从 azure 服务总线队列中批量获取消息,现在我可以使用 set-interval 获取消息。有没有其他方法可以批量获取消息。

【问题讨论】:

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


    【解决方案1】:

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

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

    github

    上的相关问题

    您也可以试试这个out

    【讨论】:

      【解决方案2】:

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

      使用Azure ServiceBus 的先决条件:

      1. Node.js Azure 包,可以使用命令安装,npm install azure
      2. 环境变量 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);
      

      【讨论】:

      • @Manish 和 Ezhilarasi 知道我们如何释放对获取的消息的锁定,以便其他消费者可以使用它。
      【解决方案3】:

      您可以使用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 秒,它将返回。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-10
          • 1970-01-01
          • 2019-03-24
          • 2021-09-27
          • 2021-01-26
          • 2012-06-14
          相关资源
          最近更新 更多