RPC和服务注册框架实现

SuzYSIS 3年前
   <h2>simple-rpc</h2>    <p>RPC BASED ON NETTY Running in some business online.</p>    <h2>内部结构</h2>    <ul>     <li>IO netty</li>     <li>Serialize with protostuff, kryo</li>     <li>Transparent service discovery and connection management</li>    </ul>    <p style="text-align:center"><img src="http://static.open-open.com/lib/uploadImg/20170113/20170113223401_161.png"></p>    <h2>现有功能</h2>    <ul>     <li>基本的客户端、服务端交互</li>     <li>提供代理实现接口</li>     <li>spring 集成, xml配置和Java Config配置方式</li>     <li>服务发布订阅 DONE</li>     <li>断线重连 DONE</li>    </ul>    <h2>RoadMap</h2>    <ul>     <li>服务心跳检测</li>     <li>连接池</li>     <li>服务注册发布功能</li>     <li>服务管理、监控</li>     <li>服务调用日志链路跟踪</li>     <li>集成swagger功能,提供文档、测试、客户端生成</li>    </ul>    <h2>消息协议</h2>    <p>当前采用简单的在消息体前加上4byte的消息长度值</p>    <h2>使用示例</h2>    <p>// 需要先启动一个zookeeper作为服务注册发现中心</p>    <pre>  <code class="language-java">// 服务接口  public interface IHello {  `      String say(String hello);        int sum(int a, int b);      int sum(Integer a, Integer b);  }  // 服务实现  public class HelloImpl implements IHello {      public String say(String hello) {          return "return " + hello;      }        public int sum(int a, int b) {          return a + b;      }        public int sum(Integer a, Integer b) {          return a + b * 3;      }    }    // 客户端代码  // beanJavaConfig方式  @Bean      public CountService countService() {          RpcClientWithLB rpcClientWithLB = new RpcClientWithLB("fyes-counter");          rpcClientWithLB.setZkConn("127.0.0.1:2181");          rpcClientWithLB.init();          CountService countService = rpcClientWithLB.newProxy(CountService.class);          return countService;      }    // 服务端发布  // xml配置方式  <bean class="com.github.liuzhengyang.simplerpc.ServerFactoryBean" init-method="start">          <property name="serviceInterface" value="com.test.liuzhengyang.CountService"/>          <property name="port" value="8888"/>          <property name="serviceName" value="fyes-counter"/>          <property name="serviceImpl" ref="countServiceImpl"/>          <property name="zkConn" value="127.0.0.1:2181"/></code></pre>    <p> </p>    <p> </p>    <p> </p>