交談群組
交談群組可識別相關交談的群組。交談群組可讓應用程式輕鬆地協調特定商務工作中所涉及的交談。
每個交談都屬於一個交談群組。每個交談群組都與特定服務相關聯,且群組中的所有交談都與該服務之間進行相互交談。交談群組可包含任意數量的交談。
SQL Server 使用交談群組,可精確單次循序 (EOIO) 存取與特定商務工作相關的訊息。當應用程式傳送或接收訊息時,SQL Server 會鎖定該訊息所屬的交談群組。因此,一次只有一個工作階段能接收到交談群組的訊息。交談群組鎖定會保證應用程式可精確單次循序 (EOIO) 處理每個交談上的訊息。因為交談群組可包含一個以上交談,所以應用程式可使用交談群組來識別與相同商務工作相關的訊息,並一起處理這些訊息。
交談群組不在交談中的參與者之間共用。因此,交談中的每個參與者可以自由群組適當的交談。應用程式可管理服務間複雜的互動,而不需要服務的任何特殊支援。
交談群組的範例
人力資源應用程式可具有結合薪資服務資訊和福利服務資訊的 GetEmployeeInformation 服務。GetEmployeeInformation 服務會以每個服務開始交談,並會將一個交談關聯到相同交談群組中的其他交談。Service Broker 會將交談群組識別碼加入至這兩個交談上的每個內送訊息,而不論到達的是薪資服務的訊息,還是福利服務的訊息。因為交談在相同的交談群組中,所以 Service Broker 會為 GetEmployeeInformation 服務提供所有必要的資訊,以比對福利資訊和薪資資訊,而不論 GetEmployeeInformation 服務中有多少要求正在進行中。
傳送到薪資服務的訊息及傳送到福利服務的訊息不包含由 GetEmployeeInformation 建立之交談群組的交談群組資訊。每個服務都獨立運作,只有 GetEmployeeInformation 服務會維護有關整個商務工作的資訊。保持服務之間的相互獨立,有助於使每個服務易於編碼並便於維護。維持此獨立性的其他優點在於:當一個服務不可用時,其他服務仍可繼續運作。
組織應用程式狀態
交談群組的一個優點在於:交談群組識別碼是識別和擷取應用程式狀態之便利的索引鍵。交談群組識別碼可讓您在資料庫中輕鬆地維護應用程式狀態。如果完成一項工作包括要在一段時間內交換許多訊息,則僅為了維護應用程式狀態,而讓應用程式的執行個體持續執行是沒有效果的。應用程式在下列情況下能更好地擴充,即 (在訊息之間) 任何與工作相關聯的資料都先儲存在資料庫中,然後在接收到下一條與該工作相關聯的訊息時再擷取。交談群組識別碼可用作主索引鍵 (在應用程式開發人員提供的狀態資料表中) 來啟用與特定工作相關聯之狀態的快速擷取。如需有關使用交談群組識別碼來維護狀態的詳細資訊,請參閱<State Management>。
因為 SQL Server 會在每次應用程式傳送或接收訊息時鎖定交談群組,所以應用程式不需要明確地防止其他程式同時更新相同的狀態資料。應用程式只需鎖定交談群組、還原狀態、處理訊息、更新狀態,然後認可交易即可。
為了方便起見,SQL Server 可讓應用程式在不接收訊息的情況下鎖定下一個可用交談群組。應用程式可使用 GET CONVERSATION GROUP 陳述式,以在處理訊息前鎖定交談群組並還原狀態。請參閱 GET CONVERSATION GROUP (Transact-SQL) 陳述式以取得詳細資料。
交談群組存留時間
Service Broker 會管理交談群組的存留時間。您不需要明確地建立或終結交談群組。Service Broker 會在下列情況下建立新的交談群組:
- 應用程式會開始與現有交談群組不相關的新交談。Service Broker 會建立新的交談群組,並將新的識別碼指派給該交談群組。
- 應用程式會開始與目前不存在的交談群組識別碼相關的交談。在此情況下,Service Broker 會使用指定的識別碼來建立新的交談群組。這表示您可以將自己的值指派給交談群組識別碼。
- Service Broker 會接收由其他服務啟動之新交談上的第一個訊息。在此情況下,Service Broker 會使用服務的名稱和 Broker 執行個體識別碼 (如果存在的話) 來執行下列動作:
- 尋找適當的佇列。
- 建立新的交談群組,並將該交談群組與佇列相關聯。
- 建立新的交談控制代碼,並將該交談控制代碼加入至新的交談群組。
- 將內送訊息排入佇列。
Service Broker 會將交談群組識別碼加入至建立交談群組之交談的中繼資料。只要 Service Broker 接收到任何與交談群組相關聯之交談的訊息,Service Broker 就會在將訊息輸入到佇列之前,將交談群組識別碼加入至該訊息。
交談群組識別碼在由 Service Broker 建立之後,到與該識別碼相關聯的全部交談結束之前都有效,即是說,只要該群組中的任何交談處於使用中,交談群組識別碼就保證有效。
使用交談群組識別碼來管理應用程式狀態的應用程式會使用由開發人員提供的狀態資料表。在應用程式確定不再需要狀態時,應用程式則必須從狀態資料表中刪除該狀態。在許多情況下,應用程式會在工作順利完成後,或出現錯誤指示工作無法完成後才刪除狀態。在這些情況下,應用程式通常包含可刪除傳送最終回應訊息及結束交談的交易中之狀態的命令。此策略可確定應用程式狀態和交流群組識別碼有相同的存留時間。如果傳送作業失敗,則刪除作業會回復。同樣地,如果刪除作業失敗,則傳送作業會回復且 SQL Server 不會傳送訊息。在這兩種情況的任何一種情況下,應用程式狀態和交流群組識別碼都持續有效。如果兩個作業都成功,則交談群組識別碼存留時間會在程式刪除相關應用程式狀態的同一時間結束。
請參閱
其他資源
sys.conversation_endpoints (Transact-SQL)
sys.conversation_groups (Transact-SQL)
Conversation Group Locks