Service Broker 是 SQL Server 2005 引入的原生訊息佇列與可靠傳遞基礎設施,整合於資料庫引擎內部,提供交易性訊息佇列,支援非同步處理、服務解耦、負載平滑、跨資料庫/跨伺服器通訊。
Message Type → Contract → Service → Queue
↓
Dialog Conversation (端對端會話)
定義訊息本文的驗證規則:
NONE:不驗證(二進位資料)。EMPTY:本文必須為空。WELL_FORMED_XML:本文必須為格式正確的 XML。VALID_XML WITH SCHEMA COLLECTION:本文須符合指定 XML Schema Collection。
CREATE MESSAGE TYPE XMLMessage
VALIDATION = WELL_FORMED_XML;
定義對話雙方可使用的訊息類型與傳送方向:
SENT BY INITIATOR:僅啟動端可送。SENT BY TARGET:僅目標端可送。SENT BY ANY:雙方皆可送。
CREATE CONTRACT XMLContract
(XMLMessage SENT BY ANY);
儲存訊息的內部資料表結構,支援狀態控制(ON/OFF)、保留選項:
CREATE QUEUE SendingQueue WITH STATUS = ON, RETENTION = OFF;
CREATE QUEUE ReceivingQueue WITH STATUS = ON, RETENTION = OFF;
啟動預存程序:可設定佇列在訊息到達時自動啟動預存程序(ACTIVATION),實現事件驅動處理。
訊息傳送的邏輯端點,綁定單一佇列,宣告支援的契約:
CREATE SERVICE SendingService ON QUEUE SendingQueue (XMLContract);
CREATE SERVICE ReceivingService ON QUEUE ReceivingQueue (XMLContract);
兩個 Service 之間的雙向、有序、可靠通訊管道:
BEGIN DIALOG CONVERSATION。conversation_handle (UNIQUEIDENTIFIER),雙端共享。
-- 1. 建立物件
CREATE MESSAGE TYPE XMLMessage VALIDATION = WELL_FORMED_XML;
CREATE CONTRACT XMLContract (XMLMessage SENT BY ANY);
CREATE QUEUE SendingQueue WITH STATUS = ON, RETENTION = OFF;
CREATE QUEUE ReceivingQueue WITH STATUS = ON, RETENTION = OFF;
CREATE SERVICE SendingService ON QUEUE SendingQueue (XMLContract);
CREATE SERVICE ReceivingService ON QUEUE ReceivingQueue (XMLContract);
-- 2. 啟動對話並發送
DECLARE @handle UNIQUEIDENTIFIER;
BEGIN DIALOG CONVERSATION @handle
FROM SERVICE SendingService
TO SERVICE 'ReceivingService'
ON CONTRACT XMLContract;
SEND ON CONVERSATION @handle
MESSAGE TYPE XMLMessage
('Welcome to Service Broker Demo ');
END CONVERSATION @handle WITH CLEANUP;
-- 查看佇列原始訊息
SELECT * FROM ReceivingQueue;
-- 解析 XML 本文
SELECT CAST(message_body AS XML) FROM ReceivingQueue;
-- 接收並移除訊息
RECEIVE CAST(message_body AS XML) FROM ReceivingQueue;
| 特性 | 說明 |
|---|---|
| 啟動預存程序 | 佇列收到訊息自動啟動處理程序,支援 MAX_QUEUE_READERS 平行度 |
| 遠端路由 | CREATE ROUTE 定義遠端 Service 的網路位址,支援跨實例/跨機器傳輸 |
| 傳輸安全性 | 憑證/Windows 驗證加密通道,訊息簽章防竄改 |
| 毒訊息處理 | 連續失敗達臨界值自動停用佇列,避免無限重試 |
| 訊息轉發 | 轉發器支援多跳路由,構建企業級訊息總線 |