1 Star 3 Fork 1

冷淡然 / danran-rpc-debug

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
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安装命令:

mvn clean install

服务提供者-消费者同时引入该maven依赖

引入打包安装好的maven依赖,因为该RPC框架内部使用了和Springboot本身冲突的日志框架,引入依赖时,最好将danran-rpc的日志依赖移除,避免程序无法启动。

image-20210825164608428

<dependency>
    <groupId>danran.rpc</groupId>
    <artifactId>danran-rpc-spring-boot-starter</artifactId>
    <version>1.0.1</version>
    <!--排除日志冲突-->
    <exclusions>
        <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
    </exclusions>
</dependency>

服务提供者、消费者同时配置注册中心(请更换为自己的ZK地址)

在项目的application.properties添加如下配置

danran.rpc.register-address=121.4.195.203:2181 # zk的地址
danran.rpc.protocol=danran
danran.rpc.server-port=6666

服务提供者使用示例

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<Book> getAllBooks() {
        return bookMapper.getAllBooks();
    }
}

在具体的服务实现类上添加@RPCService注解,即可将该类作为服务提供者注册到zookeeper中,消费端可以发现该服务,添加该注解之后,将会作为Spring的Component注入到Spring的容器中。(不再需要添加@Component注解)

服务消费者示例

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<Book> getAllBooks() {
        return bookService.getAllBooks();
    }
}

使用@InjectService注解,可以启动服务发现,然后自动注入远程服务的代理对象。

示例运行结果

启动两个Springboot的web服务,provider提供查询数据库的具体实现,consumer远程调用该服务。

  • provider启动日志

image-20210825170245344

  • consumer启动日志

image-20210825170326280

启动postman接口调试工具,访问服务接口:

image-20210825170458230

接口成功返回数据,查看程序日志:

image-20210825170650979

image-20210825171009200

空文件

简介

Java基于Netty/Zookeeper实现的RPC框架——调试仓库 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/lengdanran/danran-rpc-debug.git
git@gitee.com:lengdanran/danran-rpc-debug.git
lengdanran
danran-rpc-debug
danran-rpc-debug
master

搜索帮助