# danran-rpc-debug **Repository Path**: lengdanran/danran-rpc-debug ## Basic Information - **Project Name**: danran-rpc-debug - **Description**: Java基于Netty/Zookeeper实现的RPC框架——调试仓库 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2021-08-25 - **Last Updated**: 2022-08-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Java基于Netty/Zookeeper实现的RPC框架 > 基于Spring Boot Starter的小型RPC框架。编写这个RPC框架并不是为了重复造轮子,而是出于学习的目的,通过手写一款RPC框架来达到知识的学习和应用目的。简易的`RPC`框架(`danran-rpc`),底层使用`Netty`进行网络通信,使用`Zookeeper`为注册中心。该项目可以Maven打包直接加入其他项目运行。另外一个仓库: > > - `https://gitee.com/lengdanran/danran-rpc-debug` > - `https://github.com/lengdanran/danran-rpc-debug` > > 为该项目的整合调试仓库,在里面可调试`danran-rpc`的源码 ## 快速上手 > 示例代码:https://gitee.com/lengdanran/danran-rpc-example - `https://gitee.com/lengdanran/danran-rpc.git` - `https://github.com/lengdanran/danran-rpc.git` ### 生成本地Maven依赖包 从以上的git仓库地址clone代码到本地,然后进入到项目pom目录中,执行maven安装命令: ``` shell mvn clean install ``` ### 服务提供者-消费者同时引入该maven依赖 引入打包安装好的maven依赖,因为该RPC框架内部使用了和Springboot本身冲突的日志框架,引入依赖时,最好将`danran-rpc`的日志依赖移除,避免程序无法启动。 ![image-20210825164608428](README.assets/image-20210825164608428.png) ``` xml danran.rpc danran-rpc-spring-boot-starter 1.0.1 log4j log4j org.slf4j slf4j-log4j12 ``` ### 服务提供者、消费者同时配置注册中心(请更换为自己的ZK地址) 在项目的`application.properties`添加如下配置 ``` properties danran.rpc.register-address=121.4.195.203:2181 # zk的地址 danran.rpc.protocol=danran danran.rpc.server-port=6666 ``` ### 服务提供者使用示例 ``` java package provider.service; import common.api.BookService; import common.entity.Book; import danran.rpc.annotation.RPCService; import org.springframework.beans.factory.annotation.Autowired; import provider.mapper.BookMapper; import java.util.List; /** * @Classname BookServiceImpl * @Description TODO * @Date 2021/8/24 15:50 * @Created by ASUS */ @RPCService public class BookServiceImpl implements BookService { @Autowired private BookMapper bookMapper; /** * @return 所有的书籍信息 */ @Override public List getAllBooks() { return bookMapper.getAllBooks(); } } ``` 在具体的服务实现类上添加`@RPCService`注解,即可将该类作为服务提供者注册到`zookeeper`中,消费端可以发现该服务,添加该注解之后,将会作为Spring的Component注入到Spring的容器中。(不再需要添加@Component注解) ### 服务消费者示例 ``` java package consumer.controller; import common.api.BookService; import common.entity.Book; import danran.rpc.annotation.InjectService; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; /** * @Classname ConsumerController * @Description TODO * @Date 2021/8/24 19:04 * @Created by ASUS */ @RestController @RequestMapping("/consumer") public class ConsumerController { @InjectService private BookService bookService; @GetMapping("/get_all_books") public List getAllBooks() { return bookService.getAllBooks(); } } ``` 使用`@InjectService`注解,可以启动服务发现,然后自动注入远程服务的代理对象。 ### 示例运行结果 启动两个Springboot的web服务,provider提供查询数据库的具体实现,consumer远程调用该服务。 - provider启动日志 ![image-20210825170245344](README.assets/image-20210825170245344.png) - consumer启动日志 ![image-20210825170326280](README.assets/image-20210825170326280.png) 启动postman接口调试工具,访问服务接口: ![image-20210825170458230](README.assets/image-20210825170458230.png) 接口成功返回数据,查看程序日志: ![image-20210825170650979](README.assets/image-20210825170650979.png) ![image-20210825171009200](README.assets/image-20210825171009200.png)