一、简介
1.1 概述
XXL-RPC 是一个分布式服务框架,提供稳定高性能的RPC远程服务调用功能。拥有"高性能、分布式、注册中心、负载均衡、服务治理"等特性。现已开放源代码,开箱即用。
1.2 特性
- 1、快速接入:接入步骤非常简洁,两分钟即可上手;
- 2、服务透明:系统完整的封装了底层通信细节,开发时调用远程服务就像调用本地服务,在提供远程调用能力时不损失本地调用的语义简洁性;
- 3、多调用方案:支持 SYNC、ONEWAY、FUTURE、CALLBACK 等方案;
- 4、多通讯方案:支持 TCP 和 HTTP 两种通讯方式进行服务调用;
- 5、多序列化方案:支持 HESSIAN、HESSIAN1 等方案;
- 6、负载均衡/软负载:提供丰富的负载均衡策略,包括:轮询、随机、LRU、LFU、一致性HASH等;
- 7、注册中心:可选组件,支持服务注册并动态发现(内置“轻量级注册中心 / 服务管心”(推荐)、“Local注册中心”等);可选择不启用,直接指定服务提供方机器地址通讯;
- 8、服务治理:提供服务治理中心,可在线管理注册的服务信息,如服务锁定、禁用等;
- 9、服务监控:可在线监控服务调用统计信息以及服务健康状况等(计划中);
- 10、容错:服务提供方集群注册时,某个服务节点不可用时将会自动摘除,同时消费方将会移除失效节点将流量分发到其余节点,提高系统容错能力。
- 11、解决1+1问题:传统分布式通讯一般通过nginx或f5做集群服务的流量负载均衡,每次请求在到达目标服务机器之前都需要经过负载均衡机器,即1+1,这将会把流量放大一倍。而XXL-RPC将会从消费方直达服务提供方,每次请求直达目标机器,从而可以避免上述问题;
- 12、高兼容性:得益于优良的兼容性与模块化设计,不限制外部框架;除 spring/springboot 环境之外,理论上支持运行在任何Java代码中,甚至main方法直接启动运行;
- 13、泛化调用:服务调用方不依赖服务方提供的API;
1.3 背景
RPC(Remote Procedure Call Protocol,远程过程调用),调用远程服务就像调用本地服务,在提供远程调用能力时不损失本地调用的语义简洁性;
一般公司,尤其是大型互联网公司内部系统由上千上万个服务组成,不同的服务部署在不同机器,跑在不同的JVM上,此时需要解决两个问题:
- 1、如果我需要依赖别人的服务,但是别人的服务在远程机器上,我该如何调用?
- 2、如果其他团队需要使用我的服务,我该怎样发布自己的服务供他人调用?
“XXL-RPC”可以高效的解决这个问题:
- 1、如何调用:只需要知晓远程服务的stub和地址,即可方便的调用远程服务,同时调用透明化,就像调用本地服务一样简单;
- 2、如何发布:只需要提供自己服务的stub和地址,别人即可方便的调用我的服务,在开启注册中心的情况下服务动态发现,只需要提供服务的stub即可;
1.4 下载
文档地址
源码仓库地址
二、快速入门( springboot版本 + 轻量级注册中心 )
2.1 准备工作
下载源码,按照maven格式将源码导入IDE, 使用maven进行编译即可,源码结构如下:
源码目录介绍:
- /doc
- /xxl-rpc-admin :轻量级服务(注册)中心,可选模块;
- /xxl-rpc-core :核心依赖;
- /xxl-rpc-samples :示例项目;
- /xxl-rpc-sample-frameless :无框架版本示例;
- /xxl-rpc-sample-springboot :springboot版本示例;
- /xxl-rpc-sample-springboot-api :公共API接口
- /xxl-rpc-sample-springboot-client :服务消费方 invoker 调用示例;
- /xxl-rpc-sample-springboot-server :服务提供方 provider 示例;
2.2 搭建部署 "服务(注册)中心"
推荐使用 "xxl-rpc-admin" 作为轻量级服务(注册)中心。非常轻量级,一分钟可完成部署工作。 注册中心为可选模块,可以不使用注册中心,也可以选型其他注册中心。
2.2.1 初始化“服务(注册)中心数据库”
请下载项目源码并解压,获取 "调度数据库初始化SQL脚本" 并执行即可。数据库初始化SQL脚本"位置为:
/xxl-rpc/doc/db/tables_xxl_rpc.sql
服务(注册)中心支持集群部署,集群情况下各节点务必连接同一个mysql实例;如果mysql做主从,集群节点务必强制走主库;
2.2.2 配置部署“服务(注册)中心”
服务(注册)中心项目:xxl-rpc-admin
作用:一个轻量级分布式服务(注册)中心,拥有"轻量级、秒级注册上线、多环境、跨语言、跨机房"等特性。现已开放源代码,开箱即用。
步骤一:配置项目:
配置文件地址:
/xxl-rpc/xxl-rpc-admin/src/main/resources/application.properties
配置内容说明:
### 数据库配置
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_rpc?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
### 服务注册数据磁盘同步目录
xxl.rpc.registry.data.filepath=/data/applogs/xxl-rpc/registrydata
### xxl-rpc, access token
xxl.rpc.registry.accessToken=
### 登陆信息配置
xxl.rpc.registry.login.username=admin
xxl.rpc.registry.login.password=123456
步骤二:部署项目:
如果已经正确进行上述配置,可将项目编译打包部署。 访问地址:http://localhost:8080/xxl-rpc-admin (该地址接入方项目将会使用到,作为注册地址),登录后运行界面如下图所示