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();//获取秘钥和公钥
- }
其他的可以见例子