RPC 远程调用
目录
- 配置
- 开始使用
- 高级功能
配置
在 Jboot 中,默认实现了对 Dubbo、motan、zbus 的 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 地址和端口号。
更多的配置请查看
开始使用
一般情况下,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 "";
}