簡體   English   中英

我可以使用 node.js SDK 過濾 Azure ServiceBusService 嗎?

[英]Can I filter an Azure ServiceBusService using 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的文檔,但似乎不適用於隊列。

除了上面提到的操作之外,我無權創建或修改底層隊列,因為隊列是由客戶端提供的。

我可以嗎

  • 過濾我從隊列中獲得的結果
  • 以某種方式加速隊列處理?

過濾我從隊列中獲得的結果

如您所見,過濾器作為一項功能僅適用於主題和訂閱。

以某種方式加速隊列處理

如果您要使用@azure/service-bus包,它是與 Service Bus 一起工作的更新、更快的庫,您可以在 ReceiveAndDelete 模式下接收消息,直到您到達帶有 ActionId 9999999 的消息,關閉該接收器,然后創建一個PeekLock 模式下的新接收器。 有關這些接收模式的更多信息,請參閱https://docs.microsoft.com/en-us/azure/service-bus-messaging/message-transfers-locks-settlement#settling-receive-operations

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM