Eureka入门案例(使用说明 1-10) + Ribbon入门案例(使用说明 11-14)
软件架构说明
【1.本地初始化提交】
1)IDEA中使用 Maven 创建一个 聚合项目(父项目)
2)使用 git clone 命令克隆 gitee 版本库中新建的项目到本地,加入clone下来的内容到新建的聚合项目中,做本地初始化提交
【2.整理目录,删除不需要的】
1)在 .gitignore 添加需要忽略的内容
2)删除 src 文件夹、删除 README.en.md
【3.添加最新的 Spring Boot 和 Spring Cloud 依赖】
1)最新的 Spring Boot 依赖是 2.6.1
2)最新的 Spring Cloud 依赖是 2021.0.0
【4.新建注册中心 eureka-server Module子项目】
1)通过 Maven 的 quickstart 创建 注册中心项目 eureka-server
2)创建子项目会在父工程的pom.xml文件下,新增一些内容,比如增加 modules 标签标识创建的子项目,增加 packing 标签
【5.子项目继承父依赖,并加入相关依赖】
1)删除 pom.xml 文件中不需要的内容,加入 eureka-demo 父依赖和注册中心的相关依赖
2)其他依赖包括 eureka 注册中心依赖 和 web 依赖等
【6.整理目录结构内容,删除不需要的】
1)删掉 src/test 目录下的 AppTest
2)删掉 src/main 目录下的 App
【7.在子项目eureka-server中添加 启动类 和 配置文件 application.yml,单节点模式搭建完成】
1)添加启动类 EurekaServerApplication.java
2)在 src/main 目录下,新建 resources 资源目录,并把它标记为 Resources Root,并创建 application.yml 文件
3)在 application.yml 文件中添加配置内容
4)在 启动类 上添加 Eureka 的专属注解 @EnableEurekaServer
5)启动项目,访问 http://localhost:8761/ 即可看到 Eureka 的管理界面
【8.创建子项目注册中心eureka-server02,搭建高可用】
1)通过 Maven 的 quickstart 创建 注册中心项目 eureka-server02,搭建高可用
2)创建子项目会在父工程的pom.xml文件下,新增一些内容,比如增加 modules 标签标识创建的子项目
【9.eureka-server02 子项目继承父依赖,并加入相关依赖】
1)删除 pom.xml 文件中不需要的内容,加入 eureka-demo 父依赖和注册中心的相关依赖
2)其他依赖包括 eureka 注册中心依赖 和 web 依赖等
【10.整理目录结构内容,在子项目eureka-server中添加 启动类 和 配置文件 application.yml,高可用单机集群模式搭建完成】
1)删掉 src/test 目录下的 AppTest
2)删掉 src/main 目录下的 App
3)添加启动类 EurekaServer02Application.java
4)在 src/main 目录下,新建 resources 资源目录,并把它标记为 Resources Root,并创建 application.yml 文件
5)在 application.yml 文件中添加配置内容,这里需要修改 eureka-server 项目的 application.yml 文件内容,来搭建高可用
6)在 启动类 上添加 Eureka 的专属注解 @EnableEurekaServer
7)这里主要更改 eureka-server 和 eureka-server02 子项目的 application.yml 文件内容来搭建高可用
【11.使用 IP + 端口 的方式注册服务】
1)在 eureka-server 和 eureka-server02 的 application.yml 配置文件中,开启使用ip地址注册,并配置ip地址即可
【12.创建 服务提供者 service-provider 子项目】
1)通过 Maven 的 quickstart 创建 服务提供者 service-provider 子项目
2)创建子项目会在父工程的pom.xml文件下,新增一些内容,比如增加 modules 标签标识创建的子项目
【13.修改 服务提供者 service-provider 的 pom.xml 文件,添加相关依赖】
1)这里需要注意的是服务提供者的依赖 spring-cloud-starter-netflix-eureka-client
【14.整理目录结构内容,在子项目service-provider中添加 启动类 和 配置文件 application.yml】
1)删掉 src/test 目录下的 AppTest
2)删掉 src/main 目录下的 App
3)在 src/main 目录下,新建 resources 资源目录,并把它标记为 Resources Root,并创建 application.yml 文件
4)在 application.yml 文件中添加配置内容,这里主要是配置 服务提供者的注册中心,集群环境下都要把 注册中心地址都写上,使用逗号分隔
5)添加启动类 ServiceProviderApplication.java
【15.构建服务提供者提供的内容,即返回的数据】
1)分别创建 pojo、controller、service/impl 包,并放入对应的内容
2)没有 dao(mapper) 层,是因为我们通过模拟dao(mapper)层返回数据,减少不必要的内容,专注于微服务的搭建
3)增加商品实体类 Product.java
4)增加service层 编写商品服务(包括 接口层 IProductService.java、实现层 ProductServiceImpl.java)
5)增加controller层 ProductController.java
6)访问 http://localhost:8761/ 查看Eureka管理控制台
7)访问 http://localhost:7070/product/list 查看服务提供者提供的数据
【16.创建 服务消费者 service-consumer 子项目,用做(订单微服务)】
1)通过 Maven 的 quickstart 创建 服务消费者 service-consumer 子项目
2)创建子项目会在父工程的pom.xml文件下,新增一些内容,比如增加 modules 标签标识创建的子项目
【17.修改 服务消费者 service-consumer 的 pom.xml 文件,添加相关依赖】
1)这里需要注意的是服务消费者的依赖 spring-cloud-starter-netflix-eureka-client
【18.整理目录结构内容,在子项目service-consumer中添加 启动类 和 配置文件 application.yml】
1)删掉 src/test 目录下的 AppTest
2)删掉 src/main 目录下的 App
3)在 src/main 目录下,新建 resources 资源目录,并把它标记为 Resources Root,并创建 application.yml 文件
4)在 application.yml 文件中添加配置内容,实际环境是要把消费者也注册到注册中心,学习的时候就不注册到注册中心了
5)服务消费者不提供服务时,就不需要注册到注册中心 需要配置为 eureka.client.register-with-eureka: false
6)添加启动类 ServiceConsumerApplication.java
【19.构建 服务消费者 service-consumer 的代码内容 之 第一种远程调用服务实现方式 DiscoveryClient】
1)分别创建 pojo、controller、service/impl 包,并放入对应的内容
2)没有 dao(mapper) 层,是因为我们通过模拟dao(mapper)层返回数据,减少不必要的内容,专注于微服务的搭建
3)增加 商品 实体类 Product.java、订单 实体类 Order.java
4)增加service层 编写订单服务(包括 接口层 IOrderService.java、实现层 OrderServiceImpl.java)
5)在启动类中通过 @Bean 注解生成一下 RestTemplate 对象,交个Spring容器进行管理
6)注入元数据对象 DiscoveryClient,编写第一种的远程调用实现方式 DiscoveryClient
7)增加controller层 OrderController.java
8)访问 http://localhost:9090/order/1 即可看到远程调用返回了服务提供者提供的数据
9)其中 DiscoveryClient 用来发现获取服务、RestTemplate 用来发送请求调用远程服务返回数据
【20.构建 服务消费者 service-consumer 的代码内容 之 第二种远程调用服务实现方式 LoadBalancerClient】
1)在 service 层中注入 LoadBalancerClient 负载均衡器
2)添加第二种实现方法的代码
【21.构建 服务消费者 service-consumer 的代码内容 之 第三种远程调用服务实现方式 @LoadBalanced(常用的方式)】
1)在 启动类 的 restTemplate() 方法上添加 @LoadBalance 注解 开启Ribbon负载均衡器,让 RestTemplate 拥有负载均衡的能力
2)添加第三种方法的实现代码
【22.Eureka自我保护模式的开启与关闭】
1)在注册中心 eureka-server 和 eureka-server02 的配置文件 application.yml 中配置
【23.Eureka优雅停服】
1)服务提供者中添加 actuator 依赖
2)在服务提供者的application.yml 配置文件中配置 度量指标监控与健康检查 的内容
3)通过 http://localhost:7070/actuator/shutdown 使用 Postman 发送 POST 请求来优雅停服
【24.Eureka安全认证(1)】
1)Eureka安全认证指的是需要通过用户名和密码来访问注册中心的管理界面
2)在注册中心 eureka-sever、eureka-sever02 中添加 spring boot security 依赖
3)配置自定义的登陆用户名和密码为 root、123456
4)修改注册中心、服务提供者、服务消费者三个地方的 URL 地址为有认证的情况,加入 root:123456@
5)访问 http://localhost:8761/ 或者 http://localhost:8762/,输入用户名root、密码123456 即可进入注册中心的管理界面
【25.Eureka安全认证(2)- 过滤CSRF(方案一:安全性较高,推荐使用)】
1)方案一:使 CSRF 忽略 /eureka/** 的所有请求
2)在注册中心 eureka-server、eureka-server02 中建立 config 目录,添加配置类 WebSecurityConfig 继承自 WebSecurityConfigurerAdapter
3)重写 configure() 方法
4)重新启动运行并访问 http://localhost:8761/ 或者 http://localhost:8762/ 可以看到注册中心、服务提供者都上线了
【26.Eureka安全认证(3)- 过滤CSRF(方案二:安全性较低)】
1)方案二:保持密码验证的同时禁用 CSRF 防御机制
2)同样在注册中心 eureka-server、eureka-server02 中建立 config 目录,添加配置类 WebSecurityConfig 继承自 WebSecurityConfigurerAdapter
3)重写 configure() 方法
4)重新启动运行并访问 http://localhost:8761/ 或者 http://localhost:8762/ 可以看到注册中心、服务提供者都上线
【27.Ribbon入门案例 - 创建 服务提供者 service-provider02 子项目】
1)通过 Maven 的 quickstart 创建 服务提供者 service-provider02 子项目
2)创建子项目会在父工程的pom.xml文件下,新增一些内容,比如增加 modules 标签标识创建的子项目
【28.把 service-provider 子项目的内容拷贝到 service-provider02 子项目中】
1)包括 pom.xml、application.yml、启动类、controller层、service层、pojo 等内容,注意要修改一下端口号为 7071
2)到这里 service-provider02 服务提供者的环境就搭建好了,启动运行测试一下
3)修改一下 service-consumer 服务消费者 的 service层内容,使用第二种远程调用微服务的方式 并 打印一下它请求的微服务地址
4)使用第二种远程调用方式需要把启动类中的 @LoadBalanced 注解注释掉,否则就与第三种方式冲突了
5)连续访问 http://localhost:9090/order/2 打印输出调用的远程微服务地址,可以看到 Ribbon 默认使用的是 轮询 策略
【29.Ribbon负载均衡策略设置 - 全局方式】
1)在 服务消费者 中添加 spring-cloud-starter-netflix-ribbon 依赖,版本是 2.2.9.RELEASE
2)在 服务消费者 启动类或配置类中注入负载均衡策略对象。所有服务请求均使用该策略。
3)在这里使用Ribbon的随机策略 RandomRule
4)发现最新版的spring cloud 不支持 ribbon,所以先改为旧版的先测试(后面有新版本负载均衡的设置方法)
5)旧版的版本分别是 spring boot(2.3.12.RELEASE) 和 spring cloud(Hoxton.SR12)
6)启动项目,连续访问 http://localhost:9090/order/2 打印输出调用的远程微服务地址,可以看到 Ribbon 默认使用的是你设置的 随机 策略
【30.Ribbon负载均衡策略设置 - 局部方式】
1)注释方式一(全局方式)的负载均衡设置的内容
2)在配置文件 application.yml 中使用方式二(局部方式)配置内容设置负载均衡策略
3)启动项目,连续访问 http://localhost:9090/order/2 打印输出调用的远程微服务地址,可以看到 Ribbon 默认使用的是你设置的 随机 策略
【31.Ribbon点对点直连】
1)点对点直连是指绕过注册中心,直接连接服务提供者获取服务,一般在测试阶段使用比较多
2)打开 service-consumer 子项目,把 eureka 依赖注释掉,营造没有注册中心的 服务消费者
3)在配置文件 application.yml 中,把 eureka 的配置内容也注释掉
4)添加 spring-cloud-starter-netflix-ribbon 依赖(因为我们是通过ribbon来进行直连的)
5)在配置文件中配置 直连 的方式,指定具体的 Provider 服务列表,多个用逗号隔开
6)显示关闭 eureka 注册中心的方式
7)关闭注册中心,只启动服务提供者和服务消费者
8)关闭 Eureka 注册中心,服务提供者由于无法连接至注册中心所以会报连接异常。但是服务是可以正常可消费 的,所以目前使用的是点对点的方式来进行调用的
9)多次访问 http://localhost:9090/order/2 ,发现没有通过注册中心,远程微服务也能调用成功
【32.恢复内容】
1)Eureka 安全认证的方式恢复为使用 方式一: 使 CSRF 忽略 /eureka/** 的所有请求
2)撤销 Ribbon 点对点直连,恢复为使用注册中心
【33.Spring Cloud 2020.0.x 后推荐使用 LoadBalancer 替代 Ribbon 设置自定义的负载均衡策略】
1)把 Spring Boot 和 Spring Cloud 的版本 修改为最新的 2.6.1、2021.0.0
2)在 服务消费者 中 application.yml 的配置文件中 禁用 之前使用的 ribbon 设置自定义负载均衡的内容
3)把之前添加过的 ribbon 依赖删除掉
4)在 config 包下创建负载均衡配置类 LoadBalancerConfig.java,编写配置代码内容
5)启动类上加上 @LoadBalancerClients 注解,并设置 defaultConfiguration 属性值 为自己的负载均衡配置类
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。