【发布时间】:2020-12-22 15:06:25
【问题描述】:
我在队列中有数百万条消息,前一千万条左右无关紧要。每条消息都有一个连续的 ActionId,所以理想情况下任何 < 10000000 我都可以忽略或更好地从队列中删除。到目前为止我所拥有的:
let azure = require("azure");
function processMessage(sb, message) {
// Deserialize the JSON body into an object representing the ActionRecorded event
var actionRecorded = JSON.parse(message.body);
console.log(`processing id: ${actionRecorded.ActionId} from ${actionRecorded.ActionTaken.ActionTakenDate}`);
if (actionRecorded.ActionId < 10000000) {
// When done, delete the message from the queue
console.log(`Deleting message: ${message.brokerProperties.MessageId} with ActionId: ${actionRecorded.ActionId}`);
sb.deleteMessage(message, function(deleteError, response) {
if (deleteError) {
console.log("Error deleting message: " + message.brokerProperties.MessageId);
}
});
}
// immediately check for another message
checkForMessages(sb);
}
function checkForMessages(sb) {
// Checking for messages
sb.receiveQueueMessage("my-queue-name", { isPeekLock: true }, function(receiveError, message) {
if (receiveError && receiveError === "No messages to receive") {
console.log("No messages left in queue");
return;
} else if (receiveError) {
console.log("Receive error: " + receiveError);
} else {
processMessage(sb, message);
}
});
}
let connectionString = "Endpoint=sb://<myhub>.servicebus.windows.net/;SharedAccessKeyName=KEYNAME;SharedAccessKey=[mykey]"
let serviceBusService = azure.createServiceBusService(connectionString);
checkForMessages(serviceBusService);
我已尝试查看 withFilter 的文档,但它似乎不适用于队列。
除了上述操作之外,我无权创建或修改底层队列,因为队列是由客户端提供的。
我也可以
- 过滤我从队列中获得的结果
- 以某种方式加快队列处理速度?
【问题讨论】:
-
你终于找到解决办法了吗?我也在寻找一种解决方案,我想从队列中获取特定消息,猜想它违背了队列的目的,但这正是我所需要的。
-
@AbhishekTiwari 不幸的是,我从未找到解决方案
标签: node.js azure azureservicebus azure-sdk