.NET PetShop 4.0 作為微軟官方推出的企業級應用程式參考架構,提供了兩種截然不同的訂單處理模式:同步處理與非同步消息處理。同步模式採用傳統的資料庫直接存取方式,程式碼執行流程直觀但容易受到資料庫效能瓶頸影響;而非同步模式則引入 Microsoft Message Queuing (MSMQ) 技術,透過消息隊列實現可靠的訂單持久化與錯誤恢復機制,顯著提升系統的容錯能力與擴展性。
PetShop 4.0 的消息處理體系由六大核心命名空間構成,各司其職又緊密協作:
IOrder 介面,規範 Send 與 Receive 兩大核心操作契約。Order 與 PetShopQueue 兩個實作類別,後者封裝 System.Messaging 命名空間下的 MessageQueue 與 Message 類別,實現 IDisposable 介面確保資源正確釋放。QueueAccess 類別,統一建立 PetShop.MSMQMessaging.Order 實例,降低上層呼叫耦合度。IOrderStrategy 介面,僅包含 Insert 方法,為策略模式奠定基礎。OrderAsynchronous(非同步策略)、OrderSynchronous(同步策略)與 Order 三大類別。Order 類別透過私有方法 LoadInsertStrategy 動態載入對應策略實例,再次應用工廠模式;其 ReceiveFromQueue 方法專供非同步處理流程呼叫。Program 控制台程式(生產環境建議部署為 Windows Service),持續從隊列接收訂單並委派 BLL 層持久化入庫。當使用者下單選擇非同步模式時,Web 層呼叫 Order.Insert,經由 LoadInsertStrategy 取得 OrderAsynchronous 實例,將訂單序列化為 MSMQ 訊息送入 FormatName:DIRECT=OS:MachineName\Private$\PSOrders 隊列。獨立運行的 OrderProcessor 服務透過 ReceiveFromQueue 拉取訊息,反序列化後再次呼叫 Order.Insert 寫入資料庫。此設計使前端響應極快,且若資料庫暫時不可用,訂單安全滯留於隊列,待資料庫恢復後自動補單,實現「至少一次」交付語意。
web.config 中的四組鍵值控制運行行為:
<add key="OrderStrategyAssembly" value="PetShop.BLL"/>
<add key="OrderStrategyClass" value="PetShop.BLL.OrderSynchronous"/> <!-- 切換為 OrderAsynchronous 即啟用非同步 -->
<add key="OrderMessaging" value="PetShop.MSMQMessaging"/>
<add key="OrderQueuePath" value="FormatName:DIRECT=OS:MachineName\Private$\PSOrders"/>
部署前須在「控制台 → 新增/移除程式 → 新增/移除 Windows 元件」中勾選「訊息佇列」完成 MSMQ 安裝;生產環境建議將 OrderProcessor 封裝為 Windows Service 並設定自動重啟,確保 7×24 小時不間斷消費隊列訊息。
PetShop 4.0 透過「介面隔離 + 工廠建構 + 策略切換 + 隊列緩衝」四重設計,將同步/非同步兩種處理模式無縫整合。開發者只需修改設定檔即可在無程式碼變更情況下完成模式切換,極大降低了維護成本,也為後續微服務化遷移預留了架構彈性。