# penguin
**Repository Path**: mygolang2016/penguin
## Basic Information
- **Project Name**: penguin
- **Description**: 一个基于spring+netty的简洁分布式框架
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 20
- **Created**: 2016-10-31
- **Last Updated**: 2020-12-20
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
Penguin 项目
基于 spring + netty 实现的简洁分布式框架
使用方式:
一,简单的直连方式
1.server端:
只需要在 spring的配置文件中配置 rpcServer 即可,注意端口不能被其他应用占用
2.client端:
首先需要实现client端的调用类,并且要继承 penguin.rpc.RpcClient
然后只需要指定好server端对应service的 名称,方法名和参数,即可进行调用
public class RemoteClient1 extends RpcClient {
public String test1(String name){
String serviceName = "aService";
String methodName = "testMethod1";
String param1 = "name";
return (String)this.execSync(serviceName,methodName,param1);
}
public String test1(String name){
String serviceName = "aService";
String methodName = "testMethod2";
String param1 = "name";
String param2 = "password";
return (String)this.execSync(serviceName,methodName,param1,param2);
}
}
然后只需要再在spring的配置文件中进行配置,并且指定 被调用的server端的ip和端口即可
框架会自动从第一个地址进行连接尝试,当连接失败后会自动连接第二个地址
127.0.0.1:7001
127.0.0.1:7002
二,通过注册中心进行调用
1.注册中心 registerServer:
首先 找到 penguin中的 registry项目,可以其spring配置文件 application-config.xml中 设置自己希望的端口号,例如:
然后在tomcat中启动 penguin中的 registry项目
>
2.server端:
在server端加入如下配置,目前 注册中心的地址只支持单点,即一个机器,后期会改造为支持多个注册中心的机器,以便于更好的高可用性
127.0.0.1:7000
>
3.client端:
public class RemoteClient1 extends RpcClient {
public String test1(String name){
String serviceName = "aService";
String methodName = "testMethod1";
String param1 = "name";
return (String)this.execSync(serviceName,methodName,param1);
}
public String test1(String name){
String serviceName = "aService";
String methodName = "testMethod2";
String param1 = "name";
String param2 = "password";
return (String)this.execSync(serviceName,methodName,param1,param2);
}
}
127.0.0.1:7000
> 注意:
1.在client的配置文件中设置好希望调用的项目名称后,框架在项目启动后会自动与注册中心进行连接,并且通过希望调用的项目名称获取其在注册中心中注册的ip地址列表
2.client端在获取远程项目的地址列表之后,会挨个地址列表进行尝试连接,直到与其中一个连接成功
3.在client和server连接成功之后,就可以进行远程方法调用了,方法见上面
4.server与注册中心之间会进行心跳通讯,当心跳超时,server与注册中心断开后,注册中心会认为这个server已经宕机,并且从地址列表中移除该server
5.client与注册中心之间会进行心跳通讯,每次心跳注册中心都会将最新的server地址列表给client,以便于client进行访问
5.如果注册中心宕机,也不会影响项目正常运行
client本地会保留最后的server端地址列表,以便于继续和server端进行通讯,直到注册中心恢复
> 后续开发计划:
1.添加注册中心的页面显示,展现当前已注册的server信息 和每个client需要获取的server项目信息
2.添加会话信息,每次调用链都视为一次会话,然后可以在这次会话中保存类似的session信息,以便于每个节点进行使用
3.添加监控中心,可以统计和展现所有的方法调用链信息以及时间