【问题标题】:Can I filter an Azure ServiceBusService using node.js SDK?我可以使用 node.js SDK 筛选 Azure ServiceBusService 吗?
【发布时间】: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


【解决方案1】:

过滤我从队列中获得的结果

如您所见,过滤器作为一项功能仅适用于主题和订阅。

以某种方式加速队列处理

如果您要使用 @azure/service-bus 包,它是用于服务总线的更新、更快的库,您可以在 ReceiveAndDelete 模式下接收消息,直到收到 ActionId 为 9999999 的消息,关闭该接收器,然后创建一个PeekLock 模式下的新接收器。有关这些接收模式的更多信息,请参阅https://docs.microsoft.com/en-us/azure/service-bus-messaging/message-transfers-locks-settlement#settling-receive-operations

【讨论】:

    猜你喜欢
    • 2023-04-09
    • 1970-01-01
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    相关资源
    最近更新 更多