1 Star 1 Fork 927

lguoyuey / jboot

forked from JbootProjects / jboot 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
rpc.md 3.09 KB
一键复制 编辑 原始数据 按行查看 历史
Michael Yang 提交于 2019-10-15 18:02 . update docs

RPC 远程调用

目录

  • 配置
  • 开始使用
  • 高级功能

配置

在 Jboot 中,默认实现了对 Dubbo、motan 的 RPC 调用支持。在使用 RPC 远程调用之前,需要做一些基本的配置。

例如 :

jboot.rpc.type = dubbo
jboot.rpc.callMode = direct
jboot.rpc.directUrl = 127.0.0.1:8000
  • jboot.rpc.type : RPC 的类型,不配置默认为 Dubbo
  • jboot.rpc.callMode : RPC 的调用方式
    • direct : 直联模式
    • registry : 注册中心模式(服务注册和服务发现)
  • jboot.rpc.directUrl : 当 callMode 为 direct 直联模式时,需要配置直联模式的服务器 IP 地址和端口号。

更多的配置请查看 config.md

开始使用

一般情况下,RPC 调用需要以下几个步骤:

  • 1、定义接口
  • 2、编写实现类
  • 3、启动 Server 暴露服务
  • 4、启动客户端、通过 RPC 调用 Server 提供的服务

定义接口


public interface BlogService {

    public String findById();
    public List<String> findAll();
}

编写实现类



@RPCBean
public class BlogServiceProvider implements BlogService {

    @Override
    public String findById() {
        return "id from provider";
    }

    @Override
    public List<String> findAll() {
        return Lists.newArrayList("item1","item2");
    }
}

启动 Server 暴露服务


public class DubboServer {

    public static void main(String[] args)  {

        JbootApplication.run(args);
        System.out.println("DubboServer started...");

    }
}

启动客户端、通过 RPC 调用 Server 提供的服务


@RequestMapping("/dubbo")
public class DubboClient extends JbootController{

    public static void main(String[] args)  {

        //Undertow端口号配置
        JbootApplication.setBootArg("undertow.port", "8888");

        JbootApplication.run(args);
    }


    @RPCInject
    private  BlogService blogService;

    public void index() {
        System.out.println(blogService);
        renderText("blogId : " + blogService.findById());
    }

}

高级功能

在以上的示例中,使用到了两个注解:

  • @RPCBean,标示当前服务于RPC服务
  • @RPCInject,RPC注入赋值

虽然以上示例中,@RPCBean@RPCInject 没有添加任何的参数,但实际是他们提供了非常丰富的配置。

以下分别是 @RPCBean@RPCInject 的定义:

RPCBean :


public @interface RPCBean {

    int port() default 0;
    int timeout() default -1;
    int actives() default -1; 
    String group() default "";
    String version() default "";

    //当一个Service类实现对个接口的时候,
    //可以通过这个排除不暴露某个实现接口
    Class[] exclude() default Void.class;
}

RPCInject :


public @interface RPCInject {

    int port() default 0;
    int timeout() default -1;
    int retries() default -1;
    int actives() default -1;
    String group() default "";
    String version() default "";
    String loadbalance() default "";
    String async() default "";
    String check() default "";
}
Java
1
https://gitee.com/guoyue/jboot.git
git@gitee.com:guoyue/jboot.git
guoyue
jboot
jboot
master

搜索帮助