共用方式為


交易訊息

Service Broker 程式設計模型的基礎是交易式訊息。任何需要 Service Broker 的作業都屬於目前交易的一部分。Service Broker 並不會確認訊息作業,直到目前的交易認可為止。如果交易回復,Database Engine 可保證屬於交易一部分的所有訊息作業也會回復。應用程式會管理訊息作業以做為管理 SQL Server 交易的一部分。

例如,當程式在交易中傳送訊息時,Service Broker 不會透過網路傳送訊息,直到程式認可交易為止。當程式在交易中收到訊息時,Database Engine 不會永久地從佇列移除訊息,直到程式認可交易為止。

交易式訊息可協助您確保資料庫的狀態仍然與佇列狀態一致,以撰寫健全且可擴充的應用程式。當應用程式對資料庫進行變更並傳送或接收訊息時,對資料庫與訊息作業的變更屬於相同交易的一部分。如果交易回復,對於資料庫與訊息作業的變更會回復。兩個作業都成功,或兩個作業都失敗。在 Service Broker 模型中,應用程式會使用交易式訊息,來保證應用程式所傳送的訊息會反映資料庫的目前狀態。

若要充分利用交易式訊息,可以撰寫您的應用程式,使訊息作業在與顯示訊息的資料庫作業相同的交易中執行。例如,處理訂單的應用程式會收到訂單的訊息,並以單一交易中的訂單來更新資料庫。

如果應用程式改接收一個交易中的訊息,並更新不同交易中的資料庫,則無法更新資料庫會造成一個情況,即訊息不再存在,但是訊息要求的變更尚未發生。在此情況下,應用程式不會利用 Service Broker 提供的其中一個主要優點。特別是,Service Broker 可保證所有的訊息都能依序只傳遞一次,否則會通知訊息寄件者有 Service Broker 錯誤訊息。像在此範例中,永久地從佇列移除訊息,但是無法處理訊息的應用程式,會違背此保證。若沒有此保證,應用程式必須包含其他程式碼以處理可能的不一致,否則會有不正確結果的風險。

當應用程式處理訊息並且未變更資料庫時,保證仍然存在。該訊息已成功地處理。使用 Service Broker 的應用程式可以選擇忽略訊息,但是應用程式絕不能不小心遺失訊息,即使是在應用程式失去資料庫連結或是意外結束的情況下也是一樣。