廢話不多說,直接上例子
先上乙個自己寫的乙個用remoting實現的分布式應用小例子(這裡面沒有考慮通道加密等等的什麼高技術,只是基礎)
本例子有
乙個解決方案(remotesampleproject) ,
4個專案分別是:
格式說明:專案名稱(專案型別|輸出型別)
具體:iremotesample(介面|類庫),
remotesample(實現類|類庫),
remotesampleserver(服務端|控制台應用程式),
remotesampleclient(客戶端|控制台應用程式)
先新建乙個空的解決方案(開啟vs——檔案——新建——專案——其他專案型別——vistual studio解決方案——空白解決方案——(名稱改為remotesampleproject))
4個專案的具體實現:
①:介面(右擊解決方案——新增——新建專案——vistual c#——類庫——(名字改為iremotesample))
預設的類是class1.cs檔案,重新命名改為iremoteobject,或者刪掉class1.cs檔案,新建乙個類為iremoteobject
iremoteobject中的**如下,包含乙個求兩個值的和方法
namespaceiremotesample
}
②:實現介面類(右擊解決方案——新增——新建專案——vistual c#——類庫——(名字改為remotesample))
預設的類是class1.cs檔案,重新命名改為remotesample,或者刪掉class1.cs檔案,新建乙個類為remotesample
新增①介面類庫的dll(右擊remotesample下引用——新增引用——專案——iremotesample)
**如下:
usingiremotesample;
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)
**如下:
usingsystem;
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)
**如下:
usingsystem;
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 這其實並不能完全保證高併發下的安全問題,因為可能在鎖過期之後該執行緒尚未執行完...