基于netty的rpc远程调用

QPRC

🚀🚀🚀这是一个手写RPC项目,用于实现远程过程调用(RPC)通信🚀🚀🚀

欢迎star串门https://github.com/red-velet/

🚀Q-PRC

一、功能特性

  • 简单的RPC框架的实现:该RPC框架实现了基本的远程过程调用功能,允许客户端通过网络调用远程服务的方法,实现分布式系统之间的通信和协作。

  • 基于Netty的TCP的网络通信基本机制
    :RPC框架使用Netty作为底层通信框架,利用Netty提供的异步非阻塞IO特性,为了提高系统的并发处理能力,使用CompletableFuture等方式处理异步请求和结果。通过异步通信,可以在高并发情况下充分利用系统资源,提高性能和吞吐量。

  • 服务注册与发现:通过注册中心-ZooKeeper实现:RPC框架支持服务注册与发现功能,将服务提供者的地址注册到ZooKeeper注册中心,并由客户端从注册中心获取可用的服务提供者列表。

  • 多种序列化/反序列化、压缩协议支持
    :RPC框架提供多种序列化和反序列化协议的支持,例如JSON、Hessian等,以适应不同场景下的数据传输需求。同时,还支持数据压缩协议,有效减少网络传输的数据量,提高传输效率。

  • 多种负载均衡策略的实现:RPC框架支持负载均衡策略,用于在客户端选择合适的服务提供者。目前支持轮询、最少响应时间等负载均衡策略,可以根据实际情况选择最优的策略。

  • 请求超时与重试机制
    :为了保证系统的稳定性和性能,在RPC框架中实现了请求超时和重试机制。当请求超过设定的时间未得到响应时,会进行超时处理,避免长时间的等待。同时,也可以设置重试次数,当请求失败时,自动进行重试,提高请求成功率。

  • 服务治理能力:RPC框架支持一定程度的服务治理能力,例如心跳检测器用于定期检测服务提供者的存活性,并维护连接池。此外,还支持服务的动态添加和移除,能够在运行时动态调整服务列表。

    • 限流器:为了保护系统资源,防止过多的请求造成系统过载,RPC框架支持限流器功能。通过限制请求的并发数量或速率,可以有效地控制系统的负载,保持系统的稳定性。

    • 熔断器:当服务提供者出现故障或不可用时,熔断器功能可以避免无效的请求继续发送,而是及时中断对该服务的请求。这样可以减少资源浪费,并保护系统免受故障的影响。

  • 与Spring Boot做简单继承:RPC框架可以与Spring Boot进行简单的集成,方便在Spring
    Boot项目中使用RPC功能。可以通过自定义注解或配置来注册和使用RPC服务,并将RPC框架与Spring Boot的其他功能无缝结合。

二、项目架构

1、组成和基本流程

见github

2、分层和模块

见github

二、快速开始

  1. 克隆项目到本地:
git clone https://github.com/BlueBeastMight/qprc.git
cd qprc
  1. 修改配置文件:

qrpc-core/src/main/resources目录下,创建qprc.xml根据您的需求修改配置文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration SYSTEM "qrpc-config.dtd">
<configuration><!--端口号--><port>8095</port><!--应用名--><application>qrpc-default-applicationName</application><!--注册中心--><registry url="zookeeper://127.0.0.1:2181"/><!-- 二选一 --><!--序列化协议--><serializeType type="hessian"/><serializer code="1" name="hessian" class="icu.chiou.serialize.wrapper.impl.HessianSerializer"/><!-- 二选一 --><!--压缩协议--><compressType type="gzip"/><compressor code="1" name="gzip" class="icu.chiou.compress.wrapper.impl.GzipCompressor"/><!-- 二选一 --><!--负载均衡策略--><loadBalancer class="icu.chiou.loadbalancer.impl.MinimumResponseTimeLoadBalancer"/><loadBalancerType type="minimumResponseTime"/><!--id生成器--><idGenerator class="icu.chiou.IDGenerator" dataCenterId="2" MachineId="4"/>
</configuration>

三、API文档

暂无
​ 请参考API文档了解更多关于RPC框架的使用方法与API接口。

四、贡献指南

欢迎提交Issue或Pull Request,感谢您的贡献!😊😊😊

五、联系交流

如果您有任何疑问或建议,请发送邮件至bluebeastmight@gmail.com。

个人博客: www.chiou.icu


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/24527.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于HIVE的分区与分桶

1.分区 1.概念 Hive中的分区就是把一张大表的数据按照业务需要分散的存储到多个目录&#xff0c;每个目录就称为该表的一个分区。在查询时通过where子句中的表达式选择查询所需要的分区&#xff0c;这样的查询效率会提高很多 个人理解白话:按表中或者自定义的一个列,对数据进…

C#中XML文档与Treeview控件操作的数据同步

在前文《C#使用XML和Treeview结合实现复杂数据采集功能》中&#xff0c;使用Treeview展示了XML的数据&#xff0c;问题是如果在Treeview上进行了操作&#xff0c;怎样同步更改XML数据的内容呢&#xff1f; 这个问题看似简单&#xff0c;实现起来有一点小麻烦。 要实现的操作功能…

C语言假期作业 DAY 13

一、选择题 1、如果 x2014 &#xff0c;下面函数的返回值是&#xff08; &#xff09; int fun(unsigned int x) { int n 0; while(x 1) { n; x x | (x 1); } return n; } A: 20 B: 21 C: 23 D 25 答案解析 正确答案&#xff1a;C 这个作用是对整型中0的个数进行统计&…

Spring(九) - 解惑 spring 嵌套事务.2

1. 事务传播特性 在所有使用 spring 的应用中, 声明式事务管理可能是使用率最高的功能了, 但是, 从我观察到的情况看,绝大多数人并不能深刻理解事务声明中不同事务传播属性配置的的含义, 让我们来看一下 TransactionDefinition 接口中的定义 Java代码 /** * Support a cu…

K8s中的Secret

Secret作用&#xff1a;加密数据存在etcd里面&#xff0c;让pod容器以挂载Volume方式进行访问。场景&#xff1a;凭据

linux允许root远程ssh登录

修改文件/etc/ssh/sshd_config # cat /etc/ssh/sshd_config ... #LoginGraceTime 2m #PermitRootLogin prohibit-password #StrictModes yes #MaxAuthTries 6 #MaxSessions 10 ...将 #PermitRootLogin prohibit-password标注为&#xff1a; PermitRootLogin yes样例&#xf…

规划路线(微信小程序、H5)

//地图getLocationDian(e1, e2) {console.log(e1, e2);let self this;self.xx1 [];self.xx2 [];self.points [];// self.markers[]console.log(self.markers, >marks);// self.$jsonp(url, data).then(re > {// var coors re.result.routes[0].polyline;// for (v…

文件编辑(vi/vim)

在所有的命令执行前&#xff0c;先按Esc 1、vi的基本概念   基本上vi可以分为三种状态&#xff0c;分别是命令模式&#xff08;command mode&#xff09;、插入模式&#xff08;Insert mode&#xff09;和底行模式&#xff08;last line mode&#xff09;&#xff0c;各模式…

Llama 2 with langchain项目详解(三)

Llama 2 with langchain项目详解(三) 17.3 Llama 2 with langchain基础 本节讲解在LangChain中使用Llama 2模型的基础知识,展示如何运行LangChain的代码,及在云端运行Llama 2的700亿模型。 首先,使用Python的pip管理器安装一系列库,包括huggingface/transformers、datase…

【Python】Locust持续优化:InfluxDB与Grafana实现数据持久化与可视化分析

目录 前言 influxDB 安装运行InfluxDB 用Python 上报数据到influxdb ocust 数据写入到 influx Locust的生命周期 上报数据 优化升级 配置Grafana 总结 资料获取方法 前言 在进行性能测试时&#xff0c;我们需要对测试结果进行监控和分析&#xff0c;以便于及时发现问…

HTML+CSS+JavaScript:渲染电商站购物车页面

一、需求 根据下图渲染购物车页面 二、代码素材 以下是缺失JS部分的代码&#xff0c;感兴趣的小伙伴可以先自己试着写一写 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatib…

政务云建设与应用解决方案[42页PPT]

导读&#xff1a;原文《政务云建设与应用解决方案[42页PPT]》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 完整版领取方式 完整版领取方式&#xff1a; 如需获取完…

ELF文件格式解析

ELF(Executable and Linkable Format) 即可执行可链接文件格式&#xff0c;是目前操作系统上最常见的可执行文件格式。不同系统的目标文件不一样&#xff0c;Windows是PE&#xff08;Portable Executable&#xff09;&#xff0c;linux是ELF&#xff08;Executable Linkable Fo…

【SpringCloud】RabbitMQ基础

1.初识MQ 1.1.同步和异步通讯 微服务间通讯有同步和异步两种方式&#xff1a; 同步通讯&#xff1a;就像打电话&#xff0c;需要实时响应。 异步通讯&#xff1a;就像发邮件&#xff0c;不需要马上回复。 两种方式各有优劣&#xff0c;打电话可以立即得到响应&#xff0c;…

用Rust实现23种设计模式之 策略模式

关注我&#xff0c;学习Rust不迷路&#xff01;&#xff01; 优点 灵活性&#xff1a;策略模式允许你在运行时动态地选择不同的算法或行为&#xff0c;而无需修改已有的代码。可扩展性&#xff1a;通过添加新的策略类&#xff0c;你可以轻松地扩展策略模式的功能。可维护性&a…

vue2-diff算法

1、diff算法是什么&#xff1f; diff算法是一种通过同层的树节点进行比较的高效算法。 其有两个特点&#xff1a; 比较只会在同层级进行&#xff0c;不会跨层级进行。 在diff比较的过程中&#xff0c;循环从两边向中间比较。 diff算法在很多场景中都有应用&#xff0c;在vue中&…

Jmeter(一) - 从入门到精通 - 环境搭建(详解教程)

1.JMeter 介绍 Apache JMeter是100%纯JAVA桌面应用程序&#xff0c;被设计为用于测试客户端/服务端结构的软件(例如web应用程序)。它可以用来测试静态和动态资源的性能&#xff0c;例如&#xff1a;静态文件&#xff0c;Java Servlet,CGI Scripts,Java Object,数据库和FTP服务器…

Hadoop学习:深入解析MapReduce的大数据魔力(二)

Hadoop学习&#xff1a;深入解析MapReduce的大数据魔力&#xff08;二&#xff09; 3.3 Shuffle 机制3.3.1 Shuffle 机制3.3.2 Partition 分区3.3.3 Partition 分区案例实操3.3.4 WritableComparable 排序3.3.5 Combiner 合并 3.4 OutputFormat 数据输出3.4.1 OutputFormat 接口…

HttpServletRequest和HttpServletResponse的获取与使用

相关笔记&#xff1a;【JavaWeb之Servlet】 文章目录 1、Servlet复习2、HttpServletRequest的使用3、HttpServletResponse的使用4、获取HttpServletRequest和HttpServletResponse 1、Servlet复习 Servlet是JavaWeb的三大组件之一&#xff1a; ServletFilter 过滤器Listener 监…

医学图像处理

医学图像处理 opencv批量分片高像素图像病理图像色彩特征提取基于 imgaug、skimage 实现色彩增强基于 Cycle-GAN 完成染色标准化 病理图像细微特征提取自动数据标注分类场景下的医学图像分析分割场景下的医学图像分析检测场景下的医学图像分析 , i ] k 8 < * I opencv批量…