簡體   English   中英

我們可以按消息屬性過濾來自 Amazon SQS 隊列的消息嗎?

[英]Can we filter messages from Amazon SQS queue by message attributes?

現在我已經嘗試根據消息屬性名稱=“類”過濾消息。 正如你在下面的代碼中看到的

//Specify attribute list
        List<string> AttributesList = new List<string>();
        AttributesList.Add("Class");
        receiveMessageRequest.MessageAttributeNames = AttributesList;
        receiveMessageRequest.QueueUrl = urlSQS;
        receiveMessageRequest.MaxNumberOfMessages = 10;
        ReceiveMessageResponse receiveMessageResponse = objClient.ReceiveMessage(receiveMessageRequest);

但消息並未根據提供的 MessageAttributeName = "class" 進行過濾。

receiveMessageRequest.MessageAttributeNames = AttributesList;

這會告訴 SQS 您希望它隨消息返回哪些消息屬性(如果消息中存在 ) 它不是消息過濾器。 如果屬性不存在,則什么都不會發生。

但是您的困惑似乎可以理解——實際上並不明顯為什么 API 甚至具有此功能,盡管它可能是 SQS 僅支持比現在更小的消息時的保留,或者可能是這樣您就可以避免花費任何時間解析您最終將丟棄的響應中的信息。 我幾乎總是只要求All

請注意有關 AWS 上的消息傳遞服務的這一點

SQS :不支持過濾(在接收消息時)

SNS : 支持基於屬性的過濾:訂閱者可以設置訂閱屬性(訂閱過濾策略),該屬性應用於傳入的消息,只有相關的消息才能發送給訂閱者。

EventBridge :Amazon EventBridge 支持使用事件模式進行聲明式過濾。 通過事件模式內容過濾,您可以編寫僅在非常特定的條件下觸發的復雜規則。 例如,您可能需要一個規則,該規則僅在事件的字段在特定數字范圍內、事件來自特定 IP 地址或僅在事件 JSON 中不存在特定字段時觸發。

有關 AWS 上主要消息傳遞框架之間的詳細區別,請參閱我的文章。

https://www.linkedin.com/pulse/mastering-art-decoupling-application-architecture-aws-amit-meena/

在此處輸入圖片說明

這取決於有問題的消息如何進入隊列。 如果您通過 SNS 推送消息,那么是的,您可以過濾消息; https://docs.aws.amazon.com/sns/latest/dg/message-filtering.html

目前不存在任何其他過濾機制。

希望有幫助!

根據 AWS SDK 方法,我們可以使用以下代碼進行過濾。

 ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest("QUEUE URL" );        
    receiveMessageRequest.setMaxNumberOfMessages(Integer.valueOf(1));
private static AmazonSQS sqs;   
List<Message> messages = sqs.receiveMessage(receiveMessageRequest.withMessageAttributeNames("Attribute Name")).getMessages();

如果您想要所有消息,請使用給定的代碼

    ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest("QUEUE URL" );        
    receiveMessageRequest.setMaxNumberOfMessages(Integer.valueOf(1));
private static AmazonSQS sqs;   
List<Message> messages = sqs.receiveMessage(receiveMessageRequest.withMessageAttributeNames("All")).getMessages();

暫無
暫無

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

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