【发布时间】:2023-04-06 18:07:02
【问题描述】:
我正在尝试使用 nodeamqp10 库从 Azure 服务总线队列中“窥视”消息,但不幸的是我无法这样做。
这是我正在使用的代码:
const AMQPClient = require('amqp10/lib').Client,
Policy = require('amqp10/lib').Policy;
const protocol = 'amqps';
const keyName = 'MyPolicy';
const sasKey = 'My SAS Key'
const serviceBusHost = 'account.servicebus.windows.net';
const uri = protocol + '://' + encodeURIComponent(keyName) + ':' + encodeURIComponent(sasKey) + '@' + serviceBusHost;
const queueName = 'queue-name';
const policy = Policy.ServiceBusQueue;
policy.receiverLink.attach.rcvSettleMode = 1;
var client = new AMQPClient(policy);
client.connect(uri)
.then(function () {
return Promise.all([
client.createReceiver(queueName),
client.createSender(queueName)
]);
})
.spread(function(receiver, sender) {
sender.on('errorReceived', function (tx_err) { console.warn('===> TX ERROR: ', tx_err); });
receiver.on('errorReceived', function (rx_err) { console.warn('===> RX ERROR: ', rx_err); });
receiver.on('message', function(message) {
console.log('Received message');
console.log(message);
console.log('------------------------------------');
messages.push(message);
});
var messageOptions = {
'applicationProperties': {
'operation': 'com.microsoft:peek-message'
}
};
return sender.send({}, messageOptions);
})
.error(function (e) {
console.warn('connection error: ', e);
});
这段代码发生了一些我无法理解的事情:
- 上面的代码获取消息,但它在
Peek/Lock模式下获取它们,即每次我运行代码时,消息的传递计数都会增加一个,这不是我想要的。 - 上面的代码每次运行时都会在队列中插入一条消息。我只想从队列中获取消息而不插入任何新消息。
我浏览了here 的文档,基于此,我在applicationProperties 中将operation 指定为com.microsoft:peek-message,这应该只允许查看消息而不是查看和锁定消息。
谁能告诉我我在这里做错了什么?
【问题讨论】:
标签: node.js azure amqp azureservicebus azure-servicebus-queues