我自己瞎写的一个插件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服务开启:

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

client端:

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

Service写法

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

  1. ###接口###
  2. public interface IndexService {
  3.     public void showaa();
  4.     public void setaa(String aa);
  5.     public String getaa();
  6. }
  7. ###接口实现###
  8. @RpcService("index")//Service别名
  9. public class IndexServiceImp implements IndexService {
  10.     private static String aa="";
  11.     public void showaa() {
  12.         System.out.println("调用showaa成功");
  13.     }
  14.     public void setaa(String aa) {
  15.         this.aa = aa;
  16.     }
  17.     public String getaa() {
  18.         return aa;
  19.     }
  20. }

客户端的接口

  1. @RpcService("index")//服务端service别名
  2. public interface IndexService {
  3.     public void showaa();
  4.     public void setaa(String aa);
  5.     public String getaa();
  6. }


注册中心写法

注册中心

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


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

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

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

其他的可以见例子


评论区

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的不用去集成第三方插件,希望后续地发力。

热门分享

扫码入社