本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon SNS 中的篩選政策限制條件
當您在 Amazon SNS 中設定篩選政策時,請注意幾個重要的規則。這些規則有助於確保有效套用篩選政策,同時維持系統效能和相容性。
常見政策限制條件
在 Amazon SNS 中設定篩選政策時,請遵循下列重要規則,以確保它們有效運作,同時維持系統效能和相容性:
-
字串比對 – 對於篩選政策中的字串比對,比較區分大小寫。
-
數值比對 – 對於數值比對,值的範圍可以從 -109 到 109 (-10 億到 10 億),在小數點後有五位數的準確性。
-
篩選政策複雜性 – 篩選政策中值的總組合不得超過 150。若要計算總組合,請乘以篩選政策中每個陣列的值數目。
-
金鑰數量限制 – 篩選政策最多可有五個金鑰。
其他考量事項
-
篩選政策的 JSON 可以包含下列項目:
-
用引號括住的字串
-
數字
-
關鍵字
true
、false
和null
(不含引號)
-
-
使用 Amazon SNS API 時,您必須傳遞篩選條件政策的 JSON,做為有效的 UTF-8 字串。
-
篩選條件政策的大小上限為 256 KB。
-
根據預設,每個主題最多可有 200 個篩選政策,每個 AWS 帳戶最多可有 10,000 個篩選政策。
此政策限制不會阻止使用
Subscribe
API 建立 Amazon SQS 佇列訂閱。但是,當您在Subscribe
API 呼叫 (或SetSubscriptionAttributes
API 呼叫) 中連接篩選條件政策時,它將會失敗。若要提升配額,請使用 AWS Service Quotas。
以屬性為基礎的篩選政策限制條件
以屬性為基礎的篩選是預設選項。FilterPolicyScope
在訂閱中設定為 MessageAttributes
。
-
Amazon SNS 不接受以屬性為基礎的巢狀篩選政策。
-
Amazon SNS 只將政策屬性與具有下列資料類型的訊息屬性做比較:
-
String
-
String.Array
重要
在 Amazon SNS 中使用屬性型篩選時,您必須雙逸出某些特殊字元,特別是:
-
雙引號 (")
-
反斜線 ()
如果無法雙逸出這些字元,將導致篩選條件政策與已發佈訊息的屬性不相符,且通知將不會傳送。
-
其他考量事項
-
不建議在陣列中傳遞物件,因為它可能會因為屬性型篩選不支援的巢狀而產生非預期的結果。為巢狀政策使用以承載為基礎的篩選條件。
-
Number
支援數值屬性值。 -
Amazon SNS 會使用二進位資料類型忽略訊息屬性。
複雜性政策範例:
在下列政策範例中,第一個索引鍵有三個相符運算子,第二個則有一個相符運算子,第三個則有兩個相符運算子。
{
"key_a": ["value_one", "value_two", "value_three"],
"key_b": ["value_one"],
"key_c": ["value_one", "value_two"]
}
總組合的計算方式為篩選政策中每個索引鍵的相符運算子數目乘積:
3(match operators of key_a)
x 1(match operators of key_b)
x 2(match operators of key_c)
= 6
以承載為基礎的篩選政策限制條件
若要從以屬性為基礎的篩選 (預設) 切換為以承載為基礎的篩選,您必須在訂閱中將 FilterPolicyScope
設為 MessageBody
。
-
Amazon SNS 接受以承載為基礎的巢狀篩選政策。
-
對於巢狀政策,只有分葉索引鍵會計入五個索引鍵限制。
金鑰限制的政策範例:
在下列政策範例中:
-
有兩種分葉索引鍵:
key_c
和key_e
。 -
key_c
有四個巢狀層級為 3 的配對運算子,key_e
有三個巢狀層級為 2 的配對運算子。
{
"key_a": {
"key_b": {
"key_c": ["value_one", "value_two", "value_three", "value_four"]
}
},
"key_d": {
"key_e": ["value_one", "value_two", "value_three"]
}
}
總組合的計算方式為相符運算子數量的乘積,以及篩選政策中每個索引鍵的巢狀層級:
4(match operators of key_c) x 3(nested level of key_c) x 3(match operators of key_e) x 2(nested level of key_e) = 72
萬用字元模式使用準則
當您註冊包含萬用字元的篩選政策時,Amazon SQS 會實作 的保護,以確保不會建立過於複雜的篩選政策,因為這會影響您的應用程式效能。
模式結構
欄位包含一或多個模式。下列範例顯示使用兩種模式的欄位:
{ "greeting": [ {"anything-but": {"prefix": "Hello"}}, {"wildcard": "H*"} ] // 2 patterns }
複雜性規則
-
所有欄位的總萬用字元複雜性不得超過 100 點
-
每個模式最多 3 個萬用字元
複雜性計算
-
欄位複雜性 =
(Sum of pattern points)
×(Number of patterns)
-
模式點:
單一萬用字元:1 點
多個萬用字元:每個 3 點
任何項目:1 點
以下是複雜度計算的範例:
{ "filename": [ {"wildcard": "*.txt"}, // 1 point {"wildcard": "log*"} // 1 point ] // Total: (1 + 1) × 2 = 4 points }