Могу ли я отфильтровать Azure ServiceBusService с помощью node.js SDK?

У меня миллионы сообщений в очереди, и первые десять миллионов или около того не имеют значения. Каждое сообщение имеет последовательный 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, но, похоже, это не относится к очередям.

У меня нет доступа для создания или изменения базовой очереди, кроме операций, упомянутых выше, поскольку очередь предоставляется клиентом.

Могу ли я либо

  • Отфильтруйте мои результаты, которые я получаю из очереди
  • ускорить обработку очереди как-нибудь?

1 ответ

Фильтровать мои результаты, которые я получаю из очереди

Как вы обнаружили, фильтры как функция применимы только к темам и подпискам.

как-то ускорить обработку очереди

Если бы вы использовали @azure/service-buspackage, который является более новой и быстрой библиотекой для работы с служебной шиной, вы можете получать сообщения в режиме ReceiveAndDelete, пока не достигнете сообщения с ActionId 9999999, закройте этот приемник и затем создайте новый приемник в режиме PeekLock. Дополнительные сведения об этих режимах приема см. в статье https://docs.microsoft.com/en-us/azure/service-bus-messaging/message-transfers-locks-settlement#settling-receive-operations .

Другие вопросы по тегам