|
分布式處理在大型企業(yè)應(yīng)用系統(tǒng)中,最大的優(yōu)勢(shì)是將負(fù)載分布。通過多臺(tái)服務(wù)器處理多個(gè)任務(wù),以優(yōu)化整個(gè)系統(tǒng)的處理能力和運(yùn)行效率。分布式處理的技術(shù)核心是完成服務(wù)與服務(wù)之間、服務(wù)端與客戶端之間的通信。在.NET 1.1中,可以利用Web Service或者.NET Remoting來實(shí)現(xiàn)服務(wù)進(jìn)程之間的通信。本文將介紹一種基于消息的分布式處理架構(gòu),利用了.NET Remoting技術(shù),并參考了CORBA Naming Service的處理方式,且定義了一套消息體制,來實(shí)現(xiàn)分布式處理。
一、消息的定義
要實(shí)現(xiàn)進(jìn)程間的通信,則通信內(nèi)容的載體——消息,就必須在服務(wù)兩端具有統(tǒng)一的消息標(biāo)準(zhǔn)定義。從通信的角度來看,消息可以分為兩類:Request Messge和Reply Message。為簡(jiǎn)便起見,這兩類消息可以采用同樣的結(jié)構(gòu)。
消息的主體包括ID,Name和Body,我們可以定義如下的接口方法,來獲得消息主體的相關(guān)屬性:
public interface IMessage:ICloneable
{
IMessageItemSequence GetMessageBody();
string GetMessageID();
string GetMessageName();
void SetMessageBody(IMessageItemSequence aMessageBody);
void SetMessageID(string aID);
void SetMessageName(string aName);
}三、業(yè)務(wù)服務(wù)對(duì)于消息的處理
前面實(shí)現(xiàn)的服務(wù)架構(gòu),已經(jīng)較為完整地實(shí)現(xiàn)了分布式的服務(wù)處理。但目前的實(shí)現(xiàn),并未體現(xiàn)對(duì)消息的處理。我認(rèn)為,對(duì)消息的處理,等價(jià)與具體的業(yè)務(wù)處理。這些業(yè)務(wù)邏輯必然是在服務(wù)端完成。每個(gè)服務(wù)可能會(huì)處理單個(gè)業(yè)務(wù),也可能會(huì)處理多個(gè)業(yè)務(wù)。并且,服務(wù)與服務(wù)之間仍然存在通信,某個(gè)服務(wù)在處理業(yè)務(wù)時(shí),可能需要另一個(gè)服務(wù)的業(yè)務(wù)行為。也就是說,每一種類的消息,處理的方式均有所不同,而這些消息的唯一標(biāo)識(shí),則是在SendRequest()方法已經(jīng)有所體現(xiàn)的aMessageName。
雖然,處理的消息不同,所需要的服務(wù)不同,但是根據(jù)我們對(duì)消息的定義,我們?nèi)匀豢梢詫⑦@些消息處理機(jī)制抽象為一個(gè)統(tǒng)一的格式;在.NET中,體現(xiàn)這種機(jī)制的莫過于委托delegate。我們可以定義這樣的一個(gè)委托:
public delegate void RequestHandler(string aMessageName,IMessageItemSequence
aMessageBody,ref IMessageItemSequence aReplyMessageBody);
NET技術(shù):基于消息與.Net Remoting的分布式處理架構(gòu),轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。