# eureka-demo **Repository Path**: hmfdev/eureka-demo ## Basic Information - **Project Name**: eureka-demo - **Description**: Eureka入门案例 + Ribbon入门案例 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-12-13 - **Last Updated**: 2022-05-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: Eureka, Ribbon ## README # eureka-demo #### 介绍 Eureka入门案例(使用说明 1-10) + Ribbon入门案例(使用说明 11-14) #### 软件架构 软件架构说明 #### 安装教程 1. xxxx 2. xxxx 3. xxxx #### 使用说明 1. 搭建 Eureka 单节点模式,提交记录 1~7 2. 高可用 Eureka 注册中心搭建,提交记录 8~10 3. 使用 IP + 端口 的方式注册服务,提交记录 11 4. 服务提供者 service-provider 搭建,提交记录 12~15 5. 服务消费者 service-consumer 搭建之第一种远程调用服务实现方式 DiscoveryClient,提交记录 16~19 6. 服务消费者 service-consumer 搭建之第二种远程调用服务实现方式 LoadBalancerClient,提交记录 20 7. 服务消费者 service-consumer 搭建之第三种远程调用服务实现方式 @LoadBalanced,提交记录 21 8. Eureka自我保护模式的开启与关闭,提交记录 22 9. Eureka优雅停服,提交记录 23 10. Eureka安全认证,提交记录 24~26 11. Ribbon默认使用 轮询策略 展示,提交记录 27~28 12. Ribbon负载均衡策略设置 - 全局方式,提交记录 29 13. Ribbon负载均衡策略设置 - 局部方式,提交记录 30 14. Ribbon点对点直连,提交记录 31 15. Spring Cloud 2020.0.x 后推荐使用 LoadBalancer 替代 Ribbon 设置自定义的负载均衡策略,提交记录 33 #### 提交日志细节记录 1. 【1.本地初始化提交】 1)IDEA中使用 Maven 创建一个 聚合项目(父项目) 2)使用 git clone 命令克隆 gitee 版本库中新建的项目到本地,加入clone下来的内容到新建的聚合项目中,做本地初始化提交 2. 【2.整理目录,删除不需要的】 1)在 .gitignore 添加需要忽略的内容 2)删除 src 文件夹、删除 README.en.md 3. 【3.添加最新的 Spring Boot 和 Spring Cloud 依赖】 1)最新的 Spring Boot 依赖是 2.6.1 2)最新的 Spring Cloud 依赖是 2021.0.0 4. 【4.新建注册中心 eureka-server Module子项目】 1)通过 Maven 的 quickstart 创建 注册中心项目 eureka-server 2)创建子项目会在父工程的pom.xml文件下,新增一些内容,比如增加 modules 标签标识创建的子项目,增加 packing 标签 5. 【5.子项目继承父依赖,并加入相关依赖】 1)删除 pom.xml 文件中不需要的内容,加入 eureka-demo 父依赖和注册中心的相关依赖 2)其他依赖包括 eureka 注册中心依赖 和 web 依赖等 6. 【6.整理目录结构内容,删除不需要的】 1)删掉 src/test 目录下的 AppTest 2)删掉 src/main 目录下的 App 7. 【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. 【8.创建子项目注册中心eureka-server02,搭建高可用】 1)通过 Maven 的 quickstart 创建 注册中心项目 eureka-server02,搭建高可用 2)创建子项目会在父工程的pom.xml文件下,新增一些内容,比如增加 modules 标签标识创建的子项目 9. 【9.eureka-server02 子项目继承父依赖,并加入相关依赖】 1)删除 pom.xml 文件中不需要的内容,加入 eureka-demo 父依赖和注册中心的相关依赖 2)其他依赖包括 eureka 注册中心依赖 和 web 依赖等 10. 【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. 【11.使用 IP + 端口 的方式注册服务】 1)在 eureka-server 和 eureka-server02 的 application.yml 配置文件中,开启使用ip地址注册,并配置ip地址即可 12. 【12.创建 服务提供者 service-provider 子项目】 1)通过 Maven 的 quickstart 创建 服务提供者 service-provider 子项目 2)创建子项目会在父工程的pom.xml文件下,新增一些内容,比如增加 modules 标签标识创建的子项目 13. 【13.修改 服务提供者 service-provider 的 pom.xml 文件,添加相关依赖】 1)这里需要注意的是服务提供者的依赖 spring-cloud-starter-netflix-eureka-client 14. 【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. 【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. 【16.创建 服务消费者 service-consumer 子项目,用做(订单微服务)】 1)通过 Maven 的 quickstart 创建 服务消费者 service-consumer 子项目 2)创建子项目会在父工程的pom.xml文件下,新增一些内容,比如增加 modules 标签标识创建的子项目 17. 【17.修改 服务消费者 service-consumer 的 pom.xml 文件,添加相关依赖】 1)这里需要注意的是服务消费者的依赖 spring-cloud-starter-netflix-eureka-client 18. 【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. 【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. 【20.构建 服务消费者 service-consumer 的代码内容 之 第二种远程调用服务实现方式 LoadBalancerClient】 1)在 service 层中注入 LoadBalancerClient 负载均衡器 2)添加第二种实现方法的代码 21. 【21.构建 服务消费者 service-consumer 的代码内容 之 第三种远程调用服务实现方式 @LoadBalanced(常用的方式)】 1)在 启动类 的 restTemplate() 方法上添加 @LoadBalance 注解 开启Ribbon负载均衡器,让 RestTemplate 拥有负载均衡的能力 2)添加第三种方法的实现代码 22. 【22.Eureka自我保护模式的开启与关闭】 1)在注册中心 eureka-server 和 eureka-server02 的配置文件 application.yml 中配置 23. 【23.Eureka优雅停服】 1)服务提供者中添加 actuator 依赖 2)在服务提供者的application.yml 配置文件中配置 度量指标监控与健康检查 的内容 3)通过 http://localhost:7070/actuator/shutdown 使用 Postman 发送 POST 请求来优雅停服 24. 【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. 【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. 【26.Eureka安全认证(3)- 过滤CSRF(方案二:安全性较低)】 1)方案二:保持密码验证的同时禁用 CSRF 防御机制 2)同样在注册中心 eureka-server、eureka-server02 中建立 config 目录,添加配置类 WebSecurityConfig 继承自 WebSecurityConfigurerAdapter 3)重写 configure() 方法 4)重新启动运行并访问 http://localhost:8761/ 或者 http://localhost:8762/ 可以看到注册中心、服务提供者都上线 27. 【27.Ribbon入门案例 - 创建 服务提供者 service-provider02 子项目】 1)通过 Maven 的 quickstart 创建 服务提供者 service-provider02 子项目 2)创建子项目会在父工程的pom.xml文件下,新增一些内容,比如增加 modules 标签标识创建的子项目 28. 【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. 【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. 【30.Ribbon负载均衡策略设置 - 局部方式】 1)注释方式一(全局方式)的负载均衡设置的内容 2)在配置文件 application.yml 中使用方式二(局部方式)配置内容设置负载均衡策略 3)启动项目,连续访问 http://localhost:9090/order/2 打印输出调用的远程微服务地址,可以看到 Ribbon 默认使用的是你设置的 随机 策略 31. 【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. 【32.恢复内容】 1)Eureka 安全认证的方式恢复为使用 方式一: 使 CSRF 忽略 /eureka/** 的所有请求 2)撤销 Ribbon 点对点直连,恢复为使用注册中心 33. 【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 属性值 为自己的负载均衡配置类 #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)