【发布时间】:2020-12-09 07:32:05
【问题描述】:
我想使用 node js azure 包从 azure 服务总线队列中批量获取消息,现在我可以使用 set-interval 获取消息。有没有其他方法可以批量获取消息。
【问题讨论】:
标签: javascript node.js azure servicebus azure-servicebus-queues
我想使用 node js azure 包从 azure 服务总线队列中批量获取消息,现在我可以使用 set-interval 获取消息。有没有其他方法可以批量获取消息。
【问题讨论】:
标签: javascript node.js azure servicebus azure-servicebus-queues
Service Bus REST API 当前不支持接收批次,因此此库中没有有效的实现。部分原因是 REST 实现的性能不是特别好,使用 AMQP 会好很多。如果您正在寻找性能更好的东西,我会看看这个库:
https://github.com/noodlefrenzy/node-amqp10
上的相关问题您也可以试试这个out。
【讨论】:
可以从 ServiceBus 队列中批量查看指定数量的消息。可以使用 Node.js Azure 包中 ServiceBusService 上的 receiveQueueMessage 方法(支持一次只接收一条消息)从队列中接收消息。默认情况下,消息会在读取时从队列中删除,但是当在 peeklock 模式下接收时,通过将可选参数 isPeekLock 设置为 true 可以防止删除
使用Azure ServiceBus 的先决条件:
Node.js Azure 包,可以使用命令安装,npm install azure
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);
【讨论】:
您可以使用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 秒,它将返回。
【讨论】:
试试@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);
【讨论】: