《解剖petshop》系列之三
三、petshop資料訪問層之訊息處理
在進行系統設計時,除了對安全、事務等問題給與足夠的重視外,效能也是乙個不可避免的問題所在,尤其是乙個b/s結構的軟體系統,必須充分地考慮訪問量、資料流量、伺服器負荷的問題。解決效能的瓶頸,除了對硬體系統進行公升級外,軟體設計的合理性尤為重要。
在前面我曾提到,分層式結構設計可能會在一定程度上影響資料訪問的效能,然而與它給設計人員帶來的好處相比,幾乎可以忽略。要提供整個系統的效能,還可以從資料庫的優化著手,例如連線池的使用、建立索引、優化查詢策略等等,例如在petshop中就利用了資料庫的cache,對於資料量較大的訂單資料,則利用分庫的方式為其單獨建立了order和inventory資料庫。而在軟體設計上,比較有用的方式是利用多執行緒與非同步處理方式。
在petshop4.0中,使用了microsoft messaging queue(msmq)技術來完成非同步處理,利用訊息佇列臨時存放要插入的資料,使得資料訪問因為不需要訪問資料庫從而提供了訪問效能,至於佇列中的資料,則等待系統空閒的時候再進行處理,將其最終插入到資料庫中。
petshop4.0中的訊息處理,主要分為如下幾部分:訊息介面imessaging、訊息工廠messagingfactory、msmq實現msmqmessaging以及資料後台處理應用程式orderprocessor。
從模組化分上,petshop自始自終地履行了「面向介面設計」的原則,將訊息處理的介面與實現分開,並通過工廠模式封裝訊息實現物件的建立,以達到鬆散耦合的目的。
由於在petshop中僅對訂單的處理使用了非同步處理方式,因此在訊息介面imessaging中,僅定義了乙個iorder介面,其類圖如下:
在對訊息介面的實現中,考慮到未來的擴充套件中會有其他的資料物件會使用msmq,因此定義了乙個queue的基類,實現訊息receive和send的基本操作:
public virtual object receive()
catch (messagequeueexception mqex)
}public virtual void send(object msg)
其中queue物件是system.messaging.messagequeue型別,作為存放資料的佇列。msmq佇列是乙個可持久的佇列,因此不必擔心使用者不間斷地下訂單會導致訂單資料的丟失。在petshopqueue設定了timeout值,orderprocessor會根據timeout值定期掃瞄佇列中的訂單資料。
msmqmessaging模組中,order物件實現了imessaging模組中定義的介面iorder,同時它還繼承了基類petshopqueue,其定義如下:
public class order:petshopqueue, petshop.imessaging.iorder
方法的實現**如下:
public new orderinfo receive()
public orderinfo receive(int timeout)
order order = new order();
while (true)
else
//update elapsed time
elapsedtime = new timespan(datetime.now.ticks).totalseconds - datetimestarting.totalseconds;
}catch (timeoutexception)
}//process the queued orders
for (int k = 0; k < queueorders.count; k++)
//batch complete or msmq receive timed out
ts.complete();
}console.writeline("(thread id " + thread.currentthread.managedthreadid + ") batch finished, " + processeditems + " items, in " + elapsedtime.tostring() + " seconds.");}}
首先,它會通過petshop.bll.order類的公共方法receivefromqueue()來獲取訊息佇列中的訂單資料,並將其放入到乙個arraylist物件中,然而再呼叫petshop.bll.order類的insert方法將其插入到order和inventory資料庫中。
在petshop.bll.order類中,並不是直接執行插入訂單的操作,而是呼叫了iorderstrategy介面的insert()方法:
public void insert(orderinfo order)
{// call credit card procesor
processcreditcard(order);
PetShop資料訪問層之訊息處理
filed under design pattern bruce zhang 12 11 pm 解剖petshop 系列之三 三 petshop資料訪問層之訊息處理 在進行系統設計時,除了對安全 事務等問題給與足夠的重視外,效能也是乙個不可避免的問題所在,尤其是乙個b s結構的軟體系統,必須充分地考...
PetShop資料訪問層之訊息處理
解剖petshop 系列之三 三 petshop資料訪問層之訊息處理 在進行系統設計時,除了對安全 事務等問題給與足夠的重視外,效能也是乙個不可避免的問題所在,尤其是乙個b s結構的軟體系統,必須充分地考慮訪問量 資料流量 伺服器負荷的問題。解決效能的瓶頸,除了對硬體系統進行公升級外,軟體設計的合理...
PetShop資料訪問層之訊息處理
解剖petshop 系列之三 三 petshop資料訪問層之訊息處理 在進行系統設計時,除了對安全 事務等問題給與足夠的重視外,效能也是乙個不可避免的問題所在,尤其是乙個b s結構的軟體系統,必須充分地考慮訪問量 資料流量 伺服器負荷的問題。解決效能的瓶頸,除了對硬體系統進行公升級外,軟體設計的合理...