搭建Eureka配置中心

1.新建Spring模块 sp05-eureka

2.pom.xml 继承springcloud1

 <properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.4.1</version><configuration><mainClass>cn.tedu.sp05.Sp05EurekaApplication</mainClass></configuration><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build><repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url></repository></repositories>

3.配置yml文件

  • 禁用自我保护模式
  • 配置主机名 hostname
  • 针对单台服务器不注册也不拉取
# 应用名称
spring:application:name: eureka-server
server:port: 2001
eureka:server:enable-self-preservation: false  #禁用保护模式instance:hostname: eureka1client:#对单台服务器不注册也不拉取register-with-eureka: falsefetch-registry: false

4.启动类的注解

  • @EnableEurekaServer,触发eureka服务器的自动配置
package cn.tedu.sp05;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@SpringBootApplication
@EnableEurekaServer
public class Sp05EurekaApplication {public static void main(String[] args) {SpringApplication.run(Sp05EurekaApplication.class, args);}
}

5.浏览器访问注册表

http://localhost:2001/
实现效果

Eureka运行机制

1. 注册

  • 客户端向服务器注册时,会一次次反复注册,直到注册成功为止

2. 拉取

  • 客户端每30s拉取一次注册表,更新本地的缓存注册表

3. 心跳

  • 客户端每30s发送一次心跳数据,服务器连续三次收不到一次心跳数据,会把注册信息从注册表里删除

4. 自我保护模式

  • 在网络中断时,15min内85%服务器出现心跳异常(1次就算心跳异常),自动进入自我保护模式,保护所有注册信息都不删除
  • 网络恢复后可以自动退出保护模式
  • 开发调试期间,可以禁用保护模式,避免影响测试

客户端连接Eureka

1. 添加 eureka client依赖

  • 添加至2.3.4
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>

2. yml配置eureka 地址

  • http://eureka1:2001/eureka
  • /eureka为子路径,客户端调用eureka的API路径
  • 将配置添加至2.3.4
eureka:client:service-url: # 可以从云服务商购买不同地点的 eureka服务器# 这里可以改成云服务商提供的地点# 自己的服务器只能用defaultZone defaultZone: http://eureka1:2001/eureka

3. 修改host配置文件

  • 添加eureka1与eureka2

    实现效果

  • 因为有默认集群服务器,所以会报错

实现高可用

  • 商品的高可用

1. 修改item的启动配置

  • 添加springboot启动参数: --server.port=8001
  • 复制启动配置,修改端口 8002

    实现效果

2.修改05yml文件

application.eureka1.yml

eureka:instance:hostname: eureka1client:#集群服务器之间互相注册和拉取register-with-eureka: truefetch-registry: true# 1 连接2service-url:defaultZone: http://eureka2:2002/eureka

application.eureka2.yml

eureka:instance:hostname: eureka2client:#集群服务器之间互相注册和拉取register-with-eureka: truefetch-registry: true# 1 连接2service-url:defaultZone: http://eureka1:2001/eureka

4. 实现eureka的高可用

1. 添加eureka1和eureka2的profile配置


2. 配置启动参数

5. 修改2.3.4yml

02

spring:application:name: item-service
#item 8001 user8101 order8201
server:port: 8001
eureka:client:service-url:# 可以从云服务商购买不同地点的 eureka服务器# 这里可以改成云服务商提供的地点# 自己的服务器只能用defaultZonedefaultZone: http://eureka1:2001/eureka,http://eureka2:2002/eureka

03

spring:application:name: user-service
server:port: 8101
# Demo数据
#[{7,xx,xx},{8,xx,xx},{9,xx,xx}]
sp:user-service:users: "[{\"id\":7, \"username\":\"abc\",\"password\":\"123\"},{\"id\":8, \"username\":\"def\",\"password\":\"456\"},{\"id\":9, \"username\":\"ghi\",\"password\":\"789\"}]"
eureka:client:service-url:# 可以从云服务商购买不同地点的 eureka服务器# 这里可以改成云服务商提供的地点# 自己的服务器只能用defaultZonedefaultZone: http://eureka1:2001/eureka,http://eureka2:2002/eureka

04

spring:application:name: order-service
server:port: 8201
eureka:client:service-url:# 可以从云服务商购买不同地点的 eureka服务器# 这里可以改成云服务商提供的地点# 自己的服务器只能用defaultZonedefaultZone: http://eureka1:2001/eureka,http://eureka2:2002/eureka
ribbon:MaxAutoRetries: 1MaxAutoRetriesNextServer: 2

实现效果

fegin的远端调用和 ribbon负载均衡和重试

1.添加feign依赖至04订单工程

        <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>

2.启动类添加注解

@EnableFeignClients 触发Feign的自动配置,会自动扫描接口,创建动态代理对象

package cn.tedu.sp04;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;@SpringBootApplication
@EnableFeignClients
public class OrderApp {public static void main(String[] args) {SpringApplication.run(OrderApp.class, args);}
}

3. 定义远程调用接口

ItemClient

package cn.tedu.sp04.feign;import cn.tedu.sp01.entity.Item;
import cn.tedu.web.util.JsonResult;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;import java.util.List;
/*1.调用哪个服务
* 2.调用服务的哪个路径
* 3.向这个路径提交什么参数
* */
@FeignClient(name = "item-service")
public interface ItemClient {@GetMapping("/{orderId}")JsonResult<List<Item>> getItems(@PathVariable String orderId);@PostMapping("/decreaseNumber")//协议体提交数据JsonResult<?> decreaseNumber(@RequestBody List<Item> items);
}

UserClient

package cn.tedu.sp04.feign;import cn.tedu.sp01.entity.User;
import cn.tedu.web.util.JsonResult;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam
@FeignClient(name = "user-service")
public interface UserClient {@GetMapping("/{userId}")JsonResult<User> getUser(@PathVariable Integer userId);@PostMapping("/{userId}/score")JsonResult<?> addScore(@PathVariable Integer userId,@RequestParam("score") Integer score);
}

4.修改OrderServiceImpl完成远端调用

package cn.tedu.sp04.service;import cn.tedu.sp01.entity.Item;
import cn.tedu.sp01.entity.Order;
import cn.tedu.sp01.entity.User;
import cn.tedu.sp01.service.OrderService;
import cn.tedu.sp04.feign.ItemClient;
import cn.tedu.sp04.feign.UserClient;
import cn.tedu.web.util.JsonResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;@Service
@Slf4j
public class OrderServiceImpl implements OrderService {// TODO: 表示将要完成的工作 远程调用商品获取商品列表// TODO: 表示将要完成的工作 远程调用用户获取用户数据@Autowiredprivate ItemClient itemClient;@Autowiredprivate UserClient userClient;@Overridepublic Order getOrder(String orderId) {log.info("获取订单,orderId="+orderId);JsonResult<List<Item>> items = itemClient.getItems(orderId);JsonResult<User> user = userClient.getUser(8);//真实应使用已经登录的用户id//Demo数据 其实应该向数据库查询数据Order order=new Order();order.setId(orderId).setItems(items.getData()).setUser(user.getData());return order;}@Override/*添加订单*/public void addOrder(Order order) {log.info("添加订单"+order);// TODO: 2021/11/15  远程商品,减少库存itemClient.decreaseNumber(order.getItems());// TODO: 2021/11/15  远程用户,增加积分userClient.addScore(order.getUser().getId(),1000);}
}

Ribbon负载均衡

  • Feign集成Ribbon,默认启动负载均衡

Ribbon重试

  • 调用后台服务时,如果失败的话可以自动发起重试调用
  • (出异常、调用超时、服务器宕机)
  • 默认启用
  • 重试参数:

ribbon.MaxAutoRetries
单台服务器的重试次数 默认为0
ribbon.MaxAutoRetriesNextServer
更换服务器的次数 默认为1
ribbon.ReadTimeOut
默认1000毫秒超时
ribbon.ConnectionTimeout
与后台服务器建立连接的超时时间 默认1000
ribbon.OkToRetryOnAllOperations
是否对所有请求方式都重试,默认只对get重试

测试url

Spring Cloud Eureka实践相关推荐

  1. 在spring cloud eureka中使用ip而不是hostname

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_34173549/article/details/80640012 众所周知,spring cl ...

  2. Spring Cloud Eureka 自我保护机制

    Spring Cloud Eureka 自我保护机制 Eureka Server 在运行期间会去统计心跳失败比例在 15 分钟之内是否低于 85%,如果低于 85%,Eureka Server 会将这 ...

  3. Spring Cloud Eureka 入门 (三)服务消费者详解

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! "真正的进步 ...

  4. eureka 之前的服务如何关闭_干货分享 | 服务注册中心Spring Cloud Eureka部分源码分析...

    友情提示:全文13000多文字,预计阅读时间10-15分钟 Spring Cloud Eureka作为常用的服务注册中心,我们有必要去了解其内在实现机制,这样出现问题的时候我们可以快速去定位问题.当我 ...

  5. Spring Cloud Eureka 入门 (二)服务提供者详解

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! "优秀不是过 ...

  6. eureka集群只注册一个_一、Spring Cloud Eureka服务注册中心

    Sping boot Eureka是服务中心,管理各种服务功能包括服务的注册.发现.熔断.负载.降级等.Spring Cloud Eureka 是对Netflix公司的Eureka的二次封装. 在du ...

  7. Spring Cloud 学习笔记(一) 之服务治理模块Spring Cloud Eureka 搭建注册中心

    2019独角兽企业重金招聘Python工程师标准>>> 关于springboot的学习请参考前面的文章 接下来我们会开启一系列关于springcloud的学习文章. 一.概念 首先我 ...

  8. 《SpringCloud超级入门》Spring Cloud Eureka是什么?《八》

    Spring cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,基于 Netflix Eureka 做了二次封装,主要负责实现微服务架构中的服务治理功能. S ...

  9. Spring Cloud Eureka(三)实现一个高可用的注册中心

    Spring Cloud Eureka(三)实现一个高可用的注册中心 实现一个高可用的注册中心 在微服务结构这样的分布式环境中,我们需要充分考虑发生故障的情况,所以在生产环境中必须为服务的各个组件进行 ...

最新文章

  1. Mac OS X的快捷键
  2. monty python喜剧-【网络小说网中心】最经典的100部美剧,看到第一名瞬间服气!
  3. Matlab Robotic Toolbox V9.10工具箱(二):正/逆运动学
  4. Elasticsearch 冷热集群架构实战
  5. ABAP常用Function
  6. 学习如何写PHP MVC框架(1) -- 路由
  7. 【ArcGIS风暴】ArcGIS10.6获取栅格影像边界范围的三种方法案例详解
  8. 百度蜘蛛网站分两个服务器,SEOer需要将百度蜘蛛抓取时间降低到1秒以下
  9. 升级计算机方案,关于计算机升级方案
  10. apache commons lang架包介绍
  11. python读取多行函数_Python3基础 __doc__ 单行与多行函数文档
  12. Jenkins集群搭建
  13. linux备份整个系统
  14. ajax有哪些回调函数
  15. android感应不了夜神模拟器,夜神模拟器使用(检测不到)
  16. esxcli software vib 命令为 ESXi 5.x/6.x 主机安装补丁程序 (2008939)
  17. 12.Oracle Redo重做日志管理
  18. Muti-Barrage 一个多功能的Android弹幕库
  19. /etc/rc0.d----rc3.d---rcS.d这些目录的意义
  20. 小米蓝牙键盘怎么连接_小米2手机连接使用蓝牙键盘和蓝牙鼠标教程(原创)

热门文章

  1. 用计算机画函数图象的软件,信息技术应用 用计算机画函数图象 .ppt
  2. 常用的表单验证Js方法,身份证、手机号码、固定电话正则验证建议收藏
  3. (20)(20.4) 飞行前测试控制装置
  4. 【Python】将txt文件转换为html
  5. unity的贴花方案
  6. 卷积膨胀 Dilation
  7. android5.1手机root,最新的安卓5.1.1 ROOT教程(不需要刷第三方内核)
  8. java浮雕矩阵,常见的图像特效处理算法(基于android)
  9. 连接服务器失败请检查网络是否启用修复程序,Win10出现网络连接问题的七种修复方法...
  10. 公众号如何关联小程序?