SpringCloud02
demo–>Dept
(1) 实体类—> springCloud-api
(2) 提供者—> springcloud-provider–> Mapper Service Controller
(3) 消费者—> springCloud-consumer–> Controller (不应该有Service层)
RestTemplate(模板) 供我们直接使用!提供多种便捷访问远程Http服务的方法,是一种简单的Restful服务模板
要注册到Spring中!(@Configuration 想要什么返回什么 方法@Bean)
Controller 中直接使用 RestTemplate (@Autowired)
消费者写一个请求(@RequestMapping)
通过restemplat.get/postForobject(“url”, (传的对象/实体) ,返回值.class)
Eureka服务注册与发现
2.1 什么是Eureka
- 遵循的是AP原则
- Eureka是Netflix的一个子模块,也是核心模块之一,是一个基于REST的服务,功能类似于Dubbo的注册中心,Zookeeper
2.2 Eureka原理
- 采用C-S的架构设计,Eureka Server作为服务注册功能的服务器,是服务注册中心
- 系统中的其他微服务,使用 Eureka的客户端(Eureka Client)(在应用启动后,会向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期没有接收到某个节点的心跳,此时已经注册了,则从服务注册表中把这个服务节点移除,默认90秒) 连接到Eureka Server并维持心跳连接,并通过Eureka Server来监控各个微服务是否正常运行
2.3 聊聊Eureka的自我保护机制
- 默认情况下,如果EurekaServer在一定时间内没有收到某个微服务实例的心跳,也就是说这个微服务有可能崩了,EurekaServer将会注销该实例,默认90秒。但是当网络分区故障发生时,微服务与Eurake之间无法正常通行,但是微服务本身是健康的,此时不应该注销这个服务,Eureka会启动自我保护机制,当 EurekaServer 在短时间丢失过多客户端时,EurekaServer 就会保护注册表中的信息,不再注销服务注册表中的服务,当网络故障恢复后,EurekaServer 会自动退出自我保护模式。
- 在SpringCloud中,可以使用 eureka.server.enable-self-preservation=false 禁用自我保护模式(不推荐)
2.4 Eureka的使用步骤
-
首先编写Eureka Server ,导入依赖,编写配置文件,编写启动类,添加注解
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> <version>1.4.6.RELEASE</version> </dependency> ------------------------------------------------------------------------------------- server: port: 7001 #Eureka配置 eureka: instance: hostname: eureka7001.com #Eureka服务端的实例名称 client: register-with-eureka: false # 表示是否向eureka注册中心注册自己 fetch-registry: false #fetch-registry如果为false,则表示自己为注册中心 service-url: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ -------------------------------------------------------------------------------------- //启动之后,访问 http://localhost:7001/ @SpringBootApplication @EnableEurekaServer //EnableEurekaServer 服务端的启动类,可以接受别人注册进来~
-
其次,将provider注册到注册中心,导入依赖,编写配置文件,启动类添加注解
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> <version>1.4.6.RELEASE</version> </dependency> <!--actuator完善监控信息--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> -------------------------------------------------------------------------------------- #Eureka的配置,服务注册到哪里 eureka: client: service-url: defaultZone: http://eureka7001.com:7001/eureka/ instance: instance-id: springcloud-provider-dept8001 # 修改eureka上的默认描述信息! prefer-ip-address: true # true,可以显示服务的IP地址 ~ #info配置 info: app.name: liyuehhh-springcloud company.name: blog.yuestudy.com -------------------------------------------------------------------------------------- @EnableEurekaClient //在服务启动后自动注册到Eureka中!
2.5 Eureka集群
如:7001端口挂载 7002 7003 #EurekaServer的配置文件 defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ #provider的配置文件 eureka: client: service-url: defaultZone:http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
2.6 CPA原则及对比Zookeeper
(1)C:强一致性 A:可用性 P:分区容错性 (三进二,也就是说一个分布式系统不可能同时满足这三个特性,分区容错性必须满足)
(2)Zookeeper:CP
当向注册中心查询服务列表时,我们可以接受注册中心返回的是几分钟以前的注册信息,但是不能接受服务直接down掉,Zookeeper会出现这样的情况:当master节点由于网络故障而与其他节点失去联系时,剩余节点会重新进行leader选举,但是选举leader的时间太长,且选举期间整个集群都是不可用的,就会倒是在这个期间注册服务瘫痪。。。。
(3) Eureke:AP
Eureka能够避免上述问题,它保证了可用性,Eureka的各个节点都是平等的,几个节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和查询服务,Eureka的客户端在向某个Eureka注册时,如果发现来连接失败,则会自动切换到其他节点,有效的保证了注册服务的可用性,另外还要上述提到的保护机制,
所以,Eureka可以很好的应对因网络故障导致部分节点失去的情况,而不会像Zookeeper一样,使整个注册服务瘫痪
来源:CSDN
作者:Liyuehahaha
链接:https://blog.csdn.net/Liyuehahaha/article/details/103243500