在本教學中,您將學習如何使用 Amazon Simple Notification Service (SNS) 的訊息篩選功能。訊息篩選功能可讓訂閱 SNS 主題的端點僅接收感興趣的主題訊息的子集。

在我們的範例中,使用者造訪網站以提出保險報價請求。這些報價請求可以用於汽車保險、船舶保險或人壽保險。發出保險報價請求後,該請求將轉發到一系列後端系統。一個是處理汽車和船舶車輛保險的銷售系統,另一個是處理人壽保險的銷售系統,以及一個需要處理所有報價請求的分析系統。

正如我們在傳送散發事件通知教學中所了解的那樣,我們將使用散發訊息傳遞模式,透過 SNS 和 SQS 將網站與後端系統分離。為了將事件通知傳送至正確的後端系統,您可以針對每種類型的報價請求建立一個單獨的主題,然後將訊息路由邏輯新增至您的發佈者。但是,此選項可能導致發佈者過於復雜、主題激增,以及佈建和管理 SNS 主題的額外開銷。SNS 訊息篩選要簡單得多!

在本教學中,您將使用 Amazon SNS 和 Amazon Simple Queue Service (SQS)。兩種服務都納入 AWS 免費方案

 

在 AWS 上篩選訊息需要一個帳戶

建立免費帳戶

AWS 免費方案包含 1,000,000 次的 Amazon Simple Notification Service 發布,和 1,000,000 個 Amazon Simple Queue Service 請求。

檢視 AWS 免費方案詳細資訊 »

 

您的第一步將是建立一個 Amazon SNS 主題,以便在保險網站上提出報價請求時發佈訊息。這些潛在客戶可能與汽車保險、船舶保險或人壽保險有關。 


a.按一下這裡,即可在新瀏覽器視窗開啟 AWS 管理主控台,讓此逐步指南保持開啟狀態。當畫面載入時,請輸入您的使用者名稱和密碼以開始使用。接著,在搜尋列輸入 notification,選取 Simple Notification Service 以開啟服務主控台。

tmt_filter-messages-sent-to-topics_1a

(按一下以縮放)

tmt_filter-messages-sent-to-topics_1a

b.  若顯示 SNS 主控台登陸頁面,請按一下瀏覽概述以開始。若沒有看到此頁面,請跳至下一步。

1b-console-home

(按一下以縮放)

1b-console-home

c.  按一下左側功能表上的主題

1c-create-topic-nav-open

(按一下以縮放)

1c-dashboard

d.  按一下建立主題

 

1d-No-topics

(按一下以縮放)

1d-No-topics

e.  在主題名稱欄位中,輸入保險報價請求,然後向下捲動,按一下建立主題

 

1e-create-topic-nav-closed

(按一下以縮放)

1e-create-topic-nav-closed

f.  新主題會出現在主題詳細資訊頁面上。

 

1f-topic-insurence-quote-request-created-success

(按一下以縮放)

1f-topic-insurence-quote-request-created-success

每個保險銷售系統都會從其訂閱 SNS 主題的對應 SQS 訊息佇列中輪詢報價請求。

第一個佇列會處理汽車和船舶保險報價請求;第二個佇列會處理人壽保險的;第三個佇列會擷取全部請求。第三個佇列會擷取所有報價請求,無論保險類型為何,以便為分析系統提供資料。這些偏好設定會設定為 SNS 訂閱上的篩選政策。

在此步驟中,您會建立三個佇列,且每個佇列都會訂閱 SNS 主題。


a.按一下這裡,在新的瀏覽器視窗開啟 Amazon SQS 主控台。若顯示 SQS 登陸頁面,請按一下 Get Started Now (立即開始)。否則請繼續進行下一步。

 

tmt_filter-messages-sent-to-topics_2a

(按一下以縮放)

tmt_filter-messages-sent-to-topics_2a

b.  在建立新佇列頁面的佇列名稱欄位中,輸入汽車保險行情

保持選中標準佇列,然後按一下快速建立佇列

 

tmt_filter-messages-sent-to-topics_2b

(按一下以縮放)

tmt_filter-messages-sent-to-topics_2b

c.  按一下建立新佇列,然後重複步驟 2b,以建立兩個其他佇列:
人壽保險報價
全部報價

 

tmt_filter-messages-sent-to-topics_2c

(按一下以縮放)

tmt_filter-messages-sent-to-topics_2c

d.  現在,全部三個佇列都在 SQS 主控台中列出。

 

tmt_filter-messages-sent-to-topics_2d

(按一下以縮放)

tmt_filter-messages-sent-to-topics_2d

您現已建立三個 Amazon SQS 佇列,您需要為這些佇列訂閱 Amazon SNS 主題,以廣播新的保險報價請求。


a.  在佇列清單中,選取汽車保險報價人壽保險報價全部報價佇列。

按一下佇列動作,然後選取為佇列訂閱 SNS 主題

 

 

tmt_filter-messages-sent-to-topics_3a

(按一下以縮放)

tmt_filter-messages-sent-to-topics_3a

b.  顯示訂閱主題對話方塊。在選擇主題下拉式清單中,選取保險報價請求主題,您要為三個佇列訂閱該主題。因為您是從同一帳戶建立的 SNS 主題,所以它會顯示在清單中。

若使用另一個帳戶建立 SNS 主題,可使用主題 ARN 欄位訂閱該主題。如需更多詳細資訊,請參閱 Amazon SNS 文件或我們的部落格 與 SNS 的跨帳戶整合

 

 

tmt_filter-messages-sent-to-topics_3b

(按一下以縮放)

tmt_filter-messages-sent-to-topics_3b

c.  讓主題區域 保持不變,然後按一下訂閱。 

 

 

tmt_filter-messages-sent-to-topics_3c

(按一下以縮放)

tmt_filter-messages-sent-to-topics_3c

d.  主題訂閱結果對話方塊即會顯示。按一下 OK (確定)

tmt_filter-messages-sent-to-topics_3d

(按一下以縮放)

tmt_filter-messages-sent-to-topics_3d

現在已經建立了所有 SNS 和 SQS 資源,您可以為 SNS 訂閱設定篩選政策。篩選政策是簡單的 JSON 文件,設定為 SNS 訂閱的屬性,其定義訂閱者感興趣的通知類型。

若沒有篩選政策,訂閱會接收所有發佈至 SNS 主題的訊息,這樣您就無需為全部報價佇列設定篩選政策。


a.  返回其他瀏覽器視窗中的 Amazon SNS 主控台,然後按一下主題,以尋找該區域中所有主題的清單。

在清單中按一下主題名稱保險報價請求。  

4a-topic-list

(按一下以縮放)

4a-topic-list

b.  這會前往保險報價請求主題詳細資訊頁面,您可以在該頁面看到訂閱該 SNS 主題的所有 SQS 佇列。選取汽車保險報價佇列,然後按一下編輯

4b-topic-detail-insurance-quote-request

(按一下以縮放)

4b-topic-detail-insurance-quote-request

c.  這會前往編輯訂閱頁面。按一下箭頭以編輯訂閱篩選政策。 

4c-edit-sub-insurance-quote-request

(按一下以縮放)

4c-edit-sub-insurance-quote-request

d.  在顯示的對話方塊上,輸入以下 JSON 物件:{"insurance_type": ["car", "boat"]}

按一下儲存變更

4d-topic-edit-filter-car-boat

(按一下以縮放)

4d-topic-edit-filter-car-boat

e.  確認對話方塊即會出現,確認已成功建立的訂閱篩選政策。

 

4e-sub-saved-success

(按一下以縮放)

4e-sub-saved-success

f.  現在重複此程序,將篩選政策新增至第二個佇列。選取人壽保險報價佇列,然後按一下「編輯」。

按一下箭頭以編輯訂閱篩選政策。

在顯示的對話方塊上,輸入以下 JSON 物件:{"insurance_type": ["life"]}

按一下「儲存變更」。

您無需為與全部報價佇列相關的訂閱設定任何篩選政策。缺少政策會使此佇列擷取發佈到該主題的所有事件。

4f-topic-edit-filter-life

(按一下以縮放)

4f-topic-edit-filter-life

我們來測試一下! 在此步驟中,透過將訊息發佈到主題,您將能夠模擬來自潛在客戶產生網站的新保險報價請求。

您將發佈具有不同屬性的訊息,因此您可以檢視實際使用的 Amazon SNS 的訊息篩選機制。


a.  在保險報價請求主題頁面上,按一下發佈訊息

5a-topic-detail-with-3subs-2

(按一下以縮放)

5a-topic-detail-with-3subs-2

b.  透過在表單中輸入以下值來建立第一則訊息:

在主旨中,輸入:保險報價請求 #1

在訊息結構中,保持選取所有傳遞通訊協定的承載相同

在要傳送至端點的訊息正文中,輸入以下文字來表示汽車保險報價請求:
2017 Volvo S60,蒙特利爾

訊息屬性中:

  • 選取類型欄位中的字串
  • 名稱欄位中,輸入保險類型
  • 欄位中,輸入汽車

按一下發佈訊息

5b-publish-message-montreal-address

(按一下以縮放)

5b-publish-message-montreal-address

c.  您將返回保險報價請求主題頁面。再次按一下發佈訊息,然後使用以下值建立第二則訊息:

主旨中,輸入:保險報價請求 #2

訊息結構中,保持選取所有傳遞通訊協定的承載相同

要傳送至端點的訊息正文中,輸入以下文字來表示汽車保險報價請求:
男性,33 歲,溫哥華

訊息屬性中:

  • 選取類型欄位中的字串
  • 名稱欄位中,輸入保險類型
  • 欄位中輸入人壽

按一下發佈訊息

5c-publish-message-male33

(按一下以縮放)

5c-publish-message-male33

d.  您將返回保險報價請求主題頁面。再次按一下發佈訊息,然後使用以下值建立第二則訊息:

主旨中,輸入:保險報價請求 #3

訊息結構中,保持選取所有傳遞通訊協定的承載相同

在要傳送至端點的訊息正文中,輸入以下文字來表示汽車保險報價請求:
排屋,1500 平方英尺,多倫多

訊息屬性中:

  • 選取類型欄位中的字串
  • 名稱欄位中,輸入保險類型
  • 欄位中輸入家庭

按一下發佈訊息

5d-publish-message-toronto-address

(按一下以縮放)

5d-publish-message-toronto-address

現在,您可以檢查發生的郵件傳遞,來驗證每種類型的保險報價請求是否已路由至其相應的 SQS 郵件佇列。

您會看到,僅當訂閱的 Amazon SQS 佇列的相應 SNS 訂閱具有與該傳入訊息屬性相符的篩選政策時,該佇列才得收到該訊息。

您還會注意到,特別是一個佇列實際上收到了發佈到該主題的所有訊息。之所以發生這種情況,是因為此訂閱沒有設定篩選政策,這會導致全部擷取行為。


a.  返回 Amazon SQS 主控台。選取汽車保險報價佇列,然後按一下佇列動作

選擇檢視/刪除訊息。 

tmt_filter-messages-sent-to-topics_6a

(按一下以縮放)

tmt_filter-messages-sent-to-topics_6a

b.  按一下開始輪詢訊息

請注意,僅與該汽車保險報價 (保險報價請求 #1) 相關的訊息會被推送至該佇列中。關閉對話方塊。

tmt_filter-messages-sent-to-topics_6b

(按一下以縮放)

tmt_filter-messages-sent-to-topics_6b

c.  對第二個佇列重複該程序。選中人壽保險報價佇列方塊。從佇列動作下拉式清單中,選取檢視/刪除訊息

按一下開始輪詢訊息

請注意,與該人壽保險報價 (保險報價請求 #2) 相關的另一則訊息被推送至該佇列中。

按一下關閉

tmt_filter-messages-sent-to-topics_6c

(按一下以縮放)

tmt_filter-messages-sent-to-topics_6c

d.  最後,選中全部報價佇列方塊。按一下佇列動作,選取檢視/刪除訊息,然後按一下開始輪詢訊息

請注意,全部三則訊息均被推送至該佇列中 (保險報價請求 #1、#2 和 #3)。

按一下關閉

tmt_filter-messages-sent-to-topics_6d

(按一下以縮放)

tmt_filter-messages-sent-to-topics_6d

在此步驟中,您會刪除針對此教學所建立的資源,其包括主題、訂閱和佇列。刪除不再使用的資源是一項最佳實務,如此您就不需要繼續為其付費。


a.  在 Amazon SNS 主控台中,按一下主題,然後按一下保險報價請求主題連結。

步驟 7a

(按一下以縮放)

步驟 7a

b.  在保險報價請求主題詳細資訊頁面上,選取每項訂閱,然後按一下刪除

按一下對話方塊中的刪除以確認刪除。 

7b-topic-detail-with-3subs

(按一下以縮放)

7b-topic-detail-with-3subs

c.  在保險報價請求主題詳細資訊頁面上,按一下刪除

在對話方塊中鍵入刪除以確認刪除,然後按一下刪除。 

 

7c-topic-detail-no-sub

(按一下以縮放)

7c-topic-detail-no-sub

d.  返回 Amazon SQS 主控台。選取本教學中使用的所有三個佇列,按一下佇列動作,然後按一下刪除佇列

在對話方塊上確認刪除。

tmt_filter-messages-sent-to-topics_7d

(按一下以縮放)

tmt_filter-messages-sent-to-topics_7d

e.  您現在可以登出 AWS 管理主控台。 

tmt_filter-messages-sent-to-topics_7e

(按一下以縮放)

tmt_filter-messages-sent-to-topics_7e

您現在可以使用 Amazon Simple Notification Service (SNS) 上的訊息篩選功能,建立更簡單流暢的發佈/訂閱架構。

訊息篩選功能讓 Amazon SNS 主題的訂閱者只會接收到他們感興趣的一小部分訊息,而不會接收到發佈至某個主題的所有訊息。這會免去對訂閱者執行訊息篩選功能的複雜設計,也無需發佈系統中的訊息路由邏輯。


您現已學會如何使用 Amazon Simple Notification Service 來實作訊息篩選,請選擇下列其中一個選項深入探究關於 AWS 雲端簡訊的資訊。

進一步了解

了解適用於 Amazon Web Services (AWS) 訊息主題的功能、元件和使用案例概觀。

瀏覽 Amazon SNS 網頁 »

深入探究

瀏覽開發人員指南,了解如何為 SNS 主題實作訊息篩選。

閱讀文件 »

查看運作情形

瀏覽一個範例,該範例向您展示了如何使用 AWS SDK for Python 來實作訊息篩選。

閱讀部落格 »