我自己瞎写的一个插件rpc,新手请多多提出意见。。

https://git.oschina.net/sirius/jfinal-amaakerpc-plugin

jfinal-amaakerpc-plugin

这是一个jfinal的插件,但是也可以单独使用,是我基于eric_1989大神的jfire-simplerpc的一个扩展,主要增加对jfinal的支持,增加扫描包功能等等,详细如下:

jfire-simplerpc是一个简单快速的java间rpc调用 同时支持公网安全调用,采用rsa1024位握手加密,aes128位通讯加密

server端rpc服务开启:

AmaakeServerRpcPlugin amaakeServerRpcPlugin = new AmaakeServerRpcPlugin();
amaakeServerRpcPlugin.setPort(1688);//端口
amaakeServerRpcPlugin.setActiveAuth(true);//是否开启加密传输,可空
amaakeServerRpcPlugin.setPrivatekey(privatekey);//私钥,如果activeauth为false或者不赋值,可不用
RpcServiceLists rpcServiceLists = new RpcServiceLists();//Service列表实例
rpcServiceLists.setIsIfsearch(false);//是否开启class扫描
rpcServiceLists.addIncludePaths("com.amaake.service"); //添加扫描路径,可多路径
rpcServiceLists.addService(IndexServiceImp.class);//手动添加
amaakeServerRpcPlugin.setRpcServiceLists(rpcServiceLists);//将Service列表添加到服务里
###以下例子是连接注册中心时需要的###
//向注册中心注册
amaakeServerRpcPlugin.setIfRegistry(true);//开启注册
amaakeServerRpcPlugin.setPublickey(publickey);//客户端用的公钥
amaakeServerRpcPlugin.setRegistryBm("serverdemo");//该服务端的别名
Proxy proxy = new Proxy();//注册中心的服务端
beanproxy.setIp("127.0.0.1");//注册中心的
ipproxy.setPort(1888);//注册中心的端口
proxy.setPublickey(publickey);//连接注册中心需要的公钥
amaakeServerRpcPlugin.setRegistryProxy(proxy);
me.add(amaakeServerRpcPlugin);//启动,这是jfinal里插件的安装,你也可以
amaakeServerRpcPlugin.start();直接启动

client端:

AmaakeClientRpcPlugin amaakeClientRpcPlugin = new AmaakeClientRpcPlugin();
Proxy proxy = new Proxy();//这是一个服务端连接实体,也可以是注册中心的连接
proxy.setIp("127.0.0.1");//服务端ip地址
proxy.setPort(1688);//ip地址
proxy.setPublickey(publickey);//公钥
amaakeClientRpcPlugin.addProxyMap("demoserver",proxy,true);////最后一个参数是是否开启链接注册中心
//添加到client连接池里,这里需要一个别名来区分服务端连接,如果是注册中心别名为注册中心中的服务端别名
me.add(amaakeClientRpcPlugin);//启动,jfinal方式,可用start()方法启动
###下面是在业务中使用的例子###
IndexService indexService = AmaakeClientRpc.getAesService(IndexService.class,"demoserver");
//AmaakeClientPpc是Service调用类,IndexService.class是Service的接口,
//"demoserver"是启动时的服务端别名,用来区分这个service是属于哪个服务端的,
//这里强调一个点getAesService方法是用来使用调用加密传输的service,
//getService方法是调用非加密传输

Service写法

主要为了藕解,使用service别名和服务端别名,一个客户端可以连接多个服务端
服务端

###接口###
public interface IndexService {
    public void showaa();
    public void setaa(String aa);
    public String getaa();
}
###接口实现###
@RpcService("index")//Service别名
public class IndexServiceImp implements IndexService {
    private static String aa="";
    public void showaa() {
        System.out.println("调用showaa成功");
    }
    public void setaa(String aa) {
        this.aa = aa;
    }
    public String getaa() {
        return aa;
    }
}

客户端的接口

@RpcService("index")//服务端service别名
public interface IndexService {
    public void showaa();
    public void setaa(String aa);
    public String getaa();
}


注册中心写法

注册中心

###注意只支持jfinal###
private Routes routes = null;
public void configConstant(Constants me) {}
public void configRoute(Routes me) {
    this.routes = me;获取Routes
}
public void configPlugin(Plugins me) {
    AmaakerpcRegistryplugin amaakerpcRegistryplugin = new AmaakerpcRegistryplugin();
    amaakerpcRegistryplugin.setPort(1888);注册中心的端口
    //注册中心的秘钥
    amaakerpcRegistryplugin.setPrivatekey(private);
    amaakerpcRegistryplugin.setPath("/rpc");//访问注册中心的path
    amaakerpcRegistryplugin.setRoutes(routes);//添加Routes
    RpcRegLoginBean rpcRegLoginBean = new RpcRegLoginBean();//登陆账号密码,不添加时打开不需要输入账号密码
    rpcRegLoginBean.setUsername("amaake");
    rpcRegLoginBean.setPassword("123456");
    amaakerpcRegistryplugin.setRpcRegLoginBean(rpcRegLoginBean);
    me.add(amaakerpcRegistryplugin);
}


最后关于公钥密钥的生成,专门提供了方法

生成秘钥对,输出到控制台上

public static void main(String[] args){
    new RpcKeyGet().buildkey();//获取秘钥和公钥
}

其他的可以见例子


评论区

JFinal

2016-12-05 23:14

从代码上看简洁清晰,应该不错,有需要的朋友可以用一用,感谢你的分享,赞一个

Now天狼

2016-12-06 09:00

@JFinal \(^o^)/(~ ̄▽ ̄)~感谢波总支持

hhchor

2017-03-17 10:11

有没有验证过稳定性

Now天狼

2017-05-05 09:07

@hhchor 这个没有,当时只是简单做了个插件,核心的rpc还是用的jfire-simplerpc

lyh061619

2018-05-16 13:35

这个插件,对于Jfinal来说是挺不错的,使用rpc的不用去集成第三方插件,希望后续地发力。