1. 程式人生 > >【JMicro】微服務部署example.provider應用

【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服務,並使用此節的方法做部署及調