• 【3】JMicro微服务部署example.provider应用


    JMicro是一个用Java语言实现的开源微服务全家桶,

    源码地址:https://github.com/mynewworldyyl/jmicro

    Demo地址:http://jmicro.cn/

    功能简介: https://www.cnblogs.com/jmicro/p/13276739.html

    部署实例: https://www.cnblogs.com/jmicro/p/13340783.html

    在上一节部署实例基础上,这节将example.provider服务提供者部署到系统中,并通过后台服务配置页面调用服务。此实例可以根据“部署实例”从0开始操作部署,也可直接使用http://jmicro.cn/ 环境部署(此环境系统性能很差,需要点耐心)。 

    源码下载并编译

    首先从 https://github.com/mynewworldyyl/jmicro  下载源码到指定目录,以${base_dir}指代根目录,

    运行如下命令构建全部Jar包

     cd ${base_dir}
     mvn clean install -Dmaven.test.skip=true

    在${base_dir}exampleexample.provider arget找到jmicro-example.provider-0.0.1-SNAPSHOT-jar-with-dependencies.jar文件待用

    上传可运行Jar包

    http://jmicro.cn/环境为例,在浏览器中打开此页面,右上角点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,"jmicro.cn",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://jmicro.cn/体验;

    下一节从代码级别开发一个JMicro服务,并使用此节的方法做部署及调用。

    如非授权,禁止用于商业用途,转载请注明出处
    作者:mynewworldyyl
    邮箱:mynewworldyyl@gmail.com
  • 相关阅读:
    24.Spring-Boot-Actuator与Spring-Security整合应用
    Spring Boot 和 Spring 到底有啥区别?用了这么久,你知道吗?
    一文,5 分钟搞明白 MySQL 是如何利用索引的!
    大厂面试必问的Spring全家桶 4 大开源框架,思维脑图全总结,终于出来了
    这些SQL错误用法,如果经常犯,说明你的水平还很low...
    新技能 MyBatis 千万数据表,快速分页!
    牛逼!在IDEA里搞Spring Boot Mybatis反向工程,太爽咯~
    有了 HTTP 协议,为什么还要 RPC 协议,两者有什么区别?
    把 Spring Cloud 给拆了!详解每个组件的作用,值得收藏!
    27个阿里 Java 开源项目,值得收藏!
  • 原文地址:https://www.cnblogs.com/jmicro/p/13378056.html
Copyright © 2020-2023  润新知