Remoting實現分布式應用簡單例項

2022-04-24 22:57:28 字數 2895 閱讀 4676

廢話不多說,直接上例子

先上乙個自己寫的乙個用remoting實現的分布式應用小例子(這裡面沒有考慮通道加密等等的什麼高技術,只是基礎)

本例子有

乙個解決方案(remotesampleproject) ,

4個專案分別是:

格式說明:專案名稱(專案型別|輸出型別)

具體:iremotesample(介面|類庫),

remotesample(實現類|類庫),

remotesampleserver(服務端|控制台應用程式),

remotesampleclient(客戶端|控制台應用程式)

先新建乙個空的解決方案(開啟vs——檔案——新建——專案——其他專案型別——vistual studio解決方案——空白解決方案——(名稱改為remotesampleproject))

4個專案的具體實現:

①:介面(右擊解決方案——新增——新建專案——vistual c#——類庫——(名字改為iremotesample))

預設的類是class1.cs檔案,重新命名改為iremoteobject,或者刪掉class1.cs檔案,新建乙個類為iremoteobject

iremoteobject中的**如下,包含乙個求兩個值的和方法

namespace

iremotesample

}

②:實現介面類(右擊解決方案——新增——新建專案——vistual c#——類庫——(名字改為remotesample))

預設的類是class1.cs檔案,重新命名改為remotesample,或者刪掉class1.cs檔案,新建乙個類為remotesample

新增①介面類庫的dll(右擊remotesample下引用——新增引用——專案——iremotesample)

**如下:

using

iremotesample;

namespace

remotesample

public

int sum(int a,int

b)

}}

③:服務端(右擊解決方案——新增——新建專案——vistual c#——類庫——(名字改為remotesampleserver),右擊remotesampleserver專案——屬性——輸出型別改為控制台應用程式)

預設的類是class1.cs檔案,重新命名改為remoteserver,或者刪掉class1.cs檔案,新建乙個類為remoteserver

新增system.runtime.remoting引用(右擊remotesampleserver下引用——新增引用——.net——找到system.runtime.remoting——確定)

新增①介面類庫的dll(右擊remotesampleserver下引用——新增引用——專案——iremotesample)

新增②實現介面類庫的dll(右擊remotesampleserver下引用——新增引用——專案——remotesample)

**如下:

using

system;

using

system.runtime.remoting.channels.tcp;

using

system.runtime.remoting.channels;

using

remotesample;

using

system.runtime.remoting;

namespace

remotesampleserver

}}

③:客戶端(右擊解決方案——新增——新建專案——vistual c#——類庫——(名字改為remotesampleclient),右擊remotesampleclient專案——屬性——輸出型別改為控制台應用程式)

預設的類是class1.cs檔案,重新命名改為remoteclient,或者刪掉class1.cs檔案,新建乙個類為remoteclient

新增system.runtime.remoting引用(右擊remotesampleserver下引用——新增引用——.net——找到system.runtime.remoting——確定)

新增①介面類庫的dll(右擊remotesampleserver下引用——新增引用——專案——iremotesample)

**如下:

using

system;

using

system.runtime.remoting.channels;

using

system.runtime.remoting.channels.tcp;

using

iremotesample;

namespace

remotesampleclient

}}

好了,**全部弄完(弄不了,我就不上圖了)

執行專案檢視結果:

①右擊解決方案——屬性——選擇「當前選擇」——確定

②左擊(即單擊)remotesampleserver,按ctrl+f5(執行不除錯)

③左擊(即單擊)remotesampleclient,按ctrl+f5

結果出來了吧

remoting 客戶端步驟:new乙個通道例項——註冊該通道例項——通過system.activator.getobject訪問服務端即可獲得服務端丟擲資訊,注意服務端丟擲的是實現類,客戶端可以直接定義介面來      

接受,有點像iremoteobject remoteobject=new remoteobject();

上面的例子只是乙個最基本的remoting例項,如有錯誤請跟我說聲,我也是初學者

等spring.net,ibatis,remoting上完後我將上乙個spring.net+ibatis+remoting+.net三層架構實現真正分布式應用

Celery分布式應用

最近有應用需要部署到不同的伺服器上執行,但是有沒有pbs這樣的排程系統,就想起來python的排程神器 celery。現在針對我的實際應用做一些記錄。因為我並不注重結果而是把命令拿到不同的機器上執行,所以訊息 和結果儲存我都選擇了 redis 只需要在一台伺服器上安裝 redis,其他伺服器均使用該...

分布式事務 分布式事務的實現

如果在多個服務中需要對不同的資料庫進行操作。因為不同服務操作的資料庫都不同,所以保證在同乙個事務中完成操作顯然是不科學的。那實現分布式事務的思想 1 方法入口,建立一條日誌記錄,狀態定義為初始狀態,即儲存本條日誌記錄 可以儲存在資料庫中,也可以寫出到本地磁碟檔案 2 可以在非同步執行緒或在定時任務中...

分布式 分布式鎖

本質是利用redis的setnx 方法的特性來加鎖,setnx 即key不存在則設定key,否則直接返回false,要求在分布式系統中使用同乙個redis服務,以下提供兩種解決方案 1 直接使用redistemplate 這其實並不能完全保證高併發下的安全問題,因為可能在鎖過期之後該執行緒尚未執行完...