SpringCloud Eureka 与 Ribbon 简介
终极管理员 知识笔记 134阅读
目录
一、服务拆分

1、案例一多端口微服务
2、案例二服务远程调用

二、Eureka
1、Eureka 原理分析
2、Eureka 服务搭建注册 eureka 服务
3、Eureka 服务注册注册其他服务
4、Eureka 服务发现服务拉取
三、Ribbon 负载均衡
1、负载均衡原理
2、负载均衡策略
3、饥饿加载
一、服务拆分
通过 2 个案例学习如何实现服务拆分。
都需要引入 web 的起步依赖 1、案例一多端口微服务需求
将 Order 和 User 模块的服务进行拆分通过不同的 URL 进行服务调用。1项目结构
为 2 个模块都添加上各自的 Controller2编写 Controller
写一个简单的 Controller在页面上显示字符串即可UserController 类似3设置不同的端口启动 application
为两个模块设置不同的服务器端口user 设置 8081、order 设置 8080 将 Order 模块和 User 模块的 Application 都启动起来 访问页面 /user/query 和 /order/query2、案例二服务远程调用
需求
在 Order 的实体类中包含了 User 类型的属性当根据订单号获取订单信息时由于 Order 和 User 的数据库访问也是独立的导致 User 属性为 null。因此在 Order 模块中需要调用 User 模块的查询 user 的功能来获取 User 信息再赋值给 Order。1项目结构
两个模块都需要创建对应的实体类Order 还需要创建 service 和 mapper2OrderController 和 UserController
两个模块的 Controller 都需要添加相应的方法3OrderMapper
为了简单起见这里不引入连接数据库操作直接在 mapper 中实现返回一个 User 的方法4OrderSrevice
OrderSrevice 需要两个属性OrderMapper 和 RestTemplate
其中 RestTemplate 就是帮助我们实现远程服务调用的关键
url 属性表示发送的请求responseType 属性表示返回的数据类型默认是 JSONgetForObject() 方法表示发送 get 请求postForObject() 方法表示发送 post 请求5启动两个模块的 application
访问 /order/queryForOrderById/xxx二、Eureka 1、Eureka 原理分析
观看下面视频
08-Eureka-eureka原理分析_哔哩哔哩_bilibili
2、Eureka 服务搭建注册 eureka 服务
1创建 eureka 服务模块eureka 为子工程
子工程的 pom 文件中引入依赖 父工程的 pom 文件做好依赖管理2编写 application 配置文件注册 eureka
设置服务端口设置 eureka 服务名称设置 eureka 服务地址为什么 eureka 自身的服务地址信息也是 client
eureka 也是一个微服务所以 eureka 启动的时候会将自己也注册到 eureka 上。这是为了 eureka 之间的集群通信当有多个 eureka 时defaultZone 就需要写上多个 URL。3启动 application访问 eureka
为启动类添加 EnableEurekaServer 注解 访问 localhost:10086/eureka则会跳转到 eureka 的管理界面 instances 表示注册到 eureka 的服务示例服务列表3、Eureka 服务注册注册其他服务
1引入依赖
分别在 Order 模块和 User 模块的 pom 文件中都添加上如下依赖注意使用的是客户端 client 的依赖2编写 eureka 地址信息
这一步骤跟前面的是一样的。
设置服务端口设置 eureka 服务名称设置 eureka 服务地址3将 User 和 Order 的 application 都启动
在 Service 中添加 SpringBoot 服务即可一次性启动 访问 /localhost:10086来到 eureka 管理页面此时已经可以看到服务列表已经有 3 个服务了4多实例部署
如果我们想要 User 有多个服务实例可以添加到服务列表上可以复制多几份 User 的运行配置。
选中要复制的运行配置点击复制 在 VM Option 中添加参数 server.port 一个没用过的端口 启动 5 个 application观察服务列表 可以发现Order 和 User 各多了 1 个服务4、Eureka 服务发现服务拉取
服务发现就是服务拉取。
服务拉取是基于服务名称获取服务列表比如获取 UserService 的服务列表内含 2 个服务然后在对服务列表做负载均衡。
基于前面“服务拆分”的“案例二服务远程调用”我们来学习服务拉取。
1获取服务列表
修改 OrderService 中的代码用服务名代替 ip:port既然需要负载均衡因此肯定无法指定 ip:port所以使用服务名代替2添加负载均衡注解 LoadBalanced
在 order-service 项目的启动类 OrderApplication 中的 RestTemplate 添加负载均衡注解:3启动 application查询 Order
启动下面 5 个 application然后我们选择使用 8080 端口的 Order 来获取信息也可以用 8083 的 发送 4 次获取 Order 信息的请求id 从 1~ 4 观察 2 个 User 启动类的输出都输出了 2 次信息说明对 user-service 服务列表做到了负载均衡三、Ribbon 负载均衡 1、负载均衡原理 2、负载均衡策略
Ribbon 的负载均衡规则是一个叫做 IRule 的接口来定义的每一个子接口都是一种规则。
1Java 可以使用的负载均衡规则
2负载均衡规则修改方法
默认情况下使用的是 ZoneAvoidanceRule。
需要注意的是
第一种方式可以对所有 order-service 模块访问的服务列表做到负载均衡大第二种方式只能对配置文件中指定的 service 做到负载均衡小 3、饥饿加载Ribbon 默认是采用懒加载即第一次访问时才会去创建 LoadBalanceClient请求时间会很长。
而饥饿加载则会在项目启动时创建降低第一次访问的耗时通过下面配置开启饥饿加载
enabled true表示开启饥饿加载clients user-service表示指定对 user-service 这个服务饥饿加载clients 其实是数组形式可以协商多个服务