在本教學中,您將學習如何使用 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 以開啟服務主控台。

(按一下以縮放)


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

(按一下以縮放)


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

1c-create-topic-nav-open

(按一下以縮放)


d.  按一下建立主題

 

(按一下以縮放)


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

 

(按一下以縮放)


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

 

(按一下以縮放)

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

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

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


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

 

(按一下以縮放)


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

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

 

(按一下以縮放)


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

 

(按一下以縮放)


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

 

(按一下以縮放)

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


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

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

 

 

(按一下以縮放)


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

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

 

 

(按一下以縮放)


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

 

 

(按一下以縮放)


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

(按一下以縮放)

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

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


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

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

(按一下以縮放)


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

(按一下以縮放)


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

(按一下以縮放)


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

按一下儲存變更

(按一下以縮放)


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

 

(按一下以縮放)


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

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

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

按一下「儲存變更」。

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

(按一下以縮放)

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

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


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

(按一下以縮放)


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

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

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

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

訊息屬性中:

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

按一下發佈訊息

(按一下以縮放)


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

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

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

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

訊息屬性中:

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

按一下發佈訊息

(按一下以縮放)


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

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

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

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

訊息屬性中:

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

按一下發佈訊息

(按一下以縮放)

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

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

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


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

選擇檢視/刪除訊息。 

(按一下以縮放)


b.  按一下開始輪詢訊息

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

(按一下以縮放)


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

按一下開始輪詢訊息

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

按一下關閉

(按一下以縮放)


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

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

按一下關閉

(按一下以縮放)

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


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

步驟 7a

(按一下以縮放)

步驟 7a

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

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

(按一下以縮放)


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

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

 

(按一下以縮放)


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

在對話方塊上確認刪除。

(按一下以縮放)


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

(按一下以縮放)

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

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


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

進一步了解

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

瀏覽 Amazon SNS 網頁 »

深入探究

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

閱讀文件 »

查看運作情形

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

閱讀部落格 »