【JMicro】微服務部署example.provider應用
JMicro是一個用Java語言實現的開源微服務全家桶,
原始碼地址:https://github.com/mynewworldyyl/jmicro,
Demo地址:http://124.70.152.7 。
功能簡介: https://www.cnblogs.com/jmicro/p/13276739.html
部署例項: https://www.cnblogs.com/jmicro/p/13340783.html
在上一節部署例項基礎上,這節將example.provider服務提供者部署到系統中,並通過後臺服務配置頁面呼叫服務。此例項可以根據“部署例項”從0開始操作部署,也可直接使用http://124.70.152.7 環境部署(此環境系統性能很差,需要點耐心)。
原始碼下載並編譯
首先從 https://github.com/mynewworldyyl/jmicro 下載原始碼到指定目錄,以${base_dir}指代根目錄,
執行如下命令構建全部Jar包
cd ${base_dir} mvn clean install -Dmaven.test.skip=true
在${base_dir}\example\example.provider\target找到jmicro-example.provider-0.0.1-SNAPSHOT-jar-with-dependencies.jar檔案待用
上傳可執行Jar包
以http://124.70.152.7 環境為例,在瀏覽器中開啟此頁面,右上角點LOGIN,輸入使用者名稱:jmicro,密碼:jmicro123 登陸系統,只有登陸後,才可以上傳Jar包及部署操作。
登陸後除了自己建立的資料外,請不要做刪除和停止類的操作,特別是配置資訊,以免影響系統正常執行。
選 擇選單 deployment -> resposotory --> ADD,如下圖
彈出如下對話方塊,選擇要上傳的Jar檔案,一定要選對如圖路徑下的可執行Jar檔案
輸入名稱,預設名稱和所選檔案同名。如果倉庫中已經存在同名檔案,上傳會失敗,所以一定要輸入一個不重名的名稱,下一步部署配置時需要用到此名稱。
按確定開始上傳,如下圖
上傳成功後,在資源列表中檢視如下
配置部署描述
選擇deployment --> deploy desc --> ADD ,如下圖所示
彈出對話方塊,輸入如下圖所示配置資訊,JAR檔案即為剛才上傳成功的jar包檔名,勾選Enable表示啟用此部署,最後加-Xmx32m -Xms8m限制一下記憶體,否則會因記憶體申請失敗而部署失敗。其他的選項先不用填或保持預設即可,如下圖
按確定後,等待10秒左右,如下圖開啟程序頁面,可以看到啟動了新的JVM程序
服務呼叫
example.provider中有一個服務實現類cn.jmicro.example.rpc.impl.SimpleRpcImpl, Github地址為https://github.com/mynewworldyyl/jmicro/blob/master/example/example.provider/src/main/java/cn/jmicro/example/rpc/impl/SimpleRpcImpl.java
其中一個方法程式碼為
public String hi(Person person) { if(SF.isLoggable(MC.LOG_DEBUG)) { SF.eventLog(MC.MT_PLATFORM_LOG,MC.LOG_DEBUG,SimpleRpcImpl.class, person.getUsername()); } return "Server say hello to: " + person.toString(); }
此方法首先往監控服務輸出一條日誌資訊,然後返回一個字串。引數是一個Person類例項,如下
@SO public final class Person implements Serializable{ private String username ="Yeu"; private int id = 222;
@Override
public String toString() {
return "ID: " + this.id+", username: " + this.username;
}
}
省略了getter setter程式碼
我們現在開始從Web前端呼叫這個服務方法,選擇Monitor --》 Service選單,如下圖
彈出側欄服務列表,如下圖,右上角選擇Refresh重新整理一下列表,剛剛部署的服務才顯示出來
點選hi結點後,在編輯區開啟此方法的配置,如下圖
在開啟的服務方法配置頁面往下拖到最後,看到Testing選項卡,如下圖,在Testing Args框輸入 [{"username":"Zhangsan","id":"1"}],點選選項卡右上角Start按鈕,方法返回值輸出在Testing Result框中,如圖:
可以按相同的操作步聚呼叫別的遠端方法,注意方法引數要輸正確,正確的引數可以檢視Github上原始碼。
https://github.com/mynewworldyyl/jmicro/blob/master/example/example.api/src/main/java/cn/jmicro/example/api/rpc/ISimpleRpc.java
通過Java API呼叫遠端服務
以Maven為例,首先在POM檔案中引入如下依賴,example.api為服務介面所在專案
<dependency> <groupId>cn.jmicro</groupId> <artifactId>gateway.client</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>cn.jmicro</groupId> <artifactId>example.api</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
寫Java main函式直接呼叫RPC方法
public static void main(String[] args) { ApiGatewayClient socketClient = new ApiGatewayClient(new ApiGatewayConfig(Constants.TYPE_HTTP,"124.70.152.7",80)); ISimpleRpc srv = socketClient.getService(ISimpleRpc.class,"simpleRpc", "0.0.1"); System.out.println(srv.hi(new Person())); }
ApiGatewayConfig為Api閘道器客戶端配置類,支援3個引數,分別為連線型別,支援Http和Socket,另外兩個為Api閘道器IP和埠。ISimpleRpc為服務介面(介面,不是實現類),通過Api閘道器客戶端取得此遠端介面代理實現類,然後就可以像本地呼叫一樣呼叫遠端方法,完全不用關注HTTP協議細節,更不用關注Socket底層細節,完全面向Java介面及自定義引數的方法呼叫,當然,原生的Java 8種基本資料型別膠封裝型別也是無差別支援的。
JS前端呼叫
在HTML頭部引入JS檔案
<script type="text/javascript" src="js/utils.js"></script> <script type="text/javascript" src="js/ws.js"></script> <script type="text/javascript" src="js/rpc.js"></script>
這幾個JS檔案可以在原始碼路徑下的mng.web/public/js下找到,需要在rpc.js檔案中修改API閘道器IP和埠,如下
JS呼叫ISimpleRpc的hi方法
function hi(person) { let req = {}; req.serviceName ="cn.jmicro.example.api.rpc.ISimpleRpc"; //服務介面全名 req.namespace = "simpleRpc";//服務名稱空間 req.version = "0.0.1";//服務版本 req.method = "hi"; //服務方法名稱 req.args = [person]; //服務引數,一定要包裝在一個數組裡面
//jm.mng.callRpc返回一個Promise例項,非同步返回結果
jm.mng.callRpc(req,jm.rpc.Constants.PROTOCOL_JSON, jm.rpc.Constants.PROTOCOL_JSON) .then((msg)=>{
//非同步返回結果 console.log(msg); alert(msg); }).catch(err =>{ throw err; }); }
//呼叫hi方法
hi({"username":"Zhangsan","id":"1"});
nodejs中可以使用同樣的程式碼實現呼叫JMicro服務的方法
總結
1. JMicro服務可以通過後臺動態部署及停止;
2. JMicro服務可以通過Java客戶端及JS客戶端呼叫,這種呼叫需要通過JMicro閘道器實現;
3. JMicro服務由服務名稱,名稱空間,版本唯一確定,加方法名,IP和埠唯一確定服務執行例項;
4. 如果部署JMicro有困難,可以通過http://124.70.152.7 體驗;
下一節從程式碼級別開發一個JMicro服務,並使用此節的方法做部署及調