spring cloud总结

本文详细介绍了Spring Cloud的组件与使用,包括服务注册与发现(Eureka)、负载均衡(Ribbon)、断路器(Hystrix)、API网关(Zuul)等。同时,对比了Spring Cloud与Dubbo的区别,并讨论了Eureka的高可用性和配置。此外,还介绍了配置中心(Config)和链路跟踪(Sleuth+Zipkin)的功能。
摘要由CSDN通过智能技术生成

spring cloud 介绍

spring cloud 是一系列框架的集合,它利用spring boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用spring boot的开发风格做到一键启动和部署。spring cloud 并没有重复制造轮子,他只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过spring boot 风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

spring cloud技术组成

  1. eureka[juˈriːkə]
    微服务治理,服务注册和发现
  2. ribbon [ˈrɪbən]
    负载均衡、请求重试
  3. hystrix
    断路器,服务降级、熔断
  4. feign
    ribbon+hystrix集成,并提供声明试客户端
  5. hystix dashboard和turbine
    hystrix数据监控
  6. zuul
    API网关,提供微服务的统一入口,并提供统一的权限验证
  7. config
    配置中心
  8. bus
    消息总线,配置刷新
  9. sleuth+zipkin
    链路跟踪

Spring Cloud与Dubbo的区别

Dubbo
  1. dubbo只是一个远程调用(RPC)框架
  2. 默认基于长连接,支持多种序列化格式
Spring Cloud

1.框架集
2.提供了一整套微服务解决方案
3.基于http调用,Rest API

eureka注册与发现

在这里插入图片描述
eureka注册中心作用:
*所有服务启动,都要向eureka进行注册
*服务之间调用,需要从eureka获取地址,来互相发现

1.依赖

Eureka Server

		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
		</dependency>
2.yml文件配置
eureka:
	server:
		enable-self-preservation: false
	instance:
		hostname: eureka1
		lease-expiration-duration-in-seconds: 90
	client:
		register-with-eureka: false
		fetch-registry: false

eureka.server.enable-self-preservation:
eureka的自我保护状态:心跳失败的比例,在15分钟内是否低于85%,如果出现了低于的情况,Eureka Server会将当前的实例注册中心信息保护起来,同时提示一个警告,一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不在删除服务注册表中的数据。也就是不会注销任何微服务
eureka.instance.hostname:
eureka是集群服务器,都是由若干eureka服务器组成,其中靠hostname来区分
eureka.client.register-with-eureka:
如果是一个eureka服务器,此处写false,表示不向自身注册
如果是多个服务器
则需要写true,且需要需要写明注册的另一个服务器名称
例如:

eureka:
	instance:
		hostname:
	client:register-with-eureka: true
	fetch-registry: true

	service-url:
		defaultZone: http://eureka2:2002/eureka

eureka.client.fitch-registry:
此处与register-with-eureka用法相似,如果是一个服务器写false,表示不从自身拉去注册信息,如果是多个服务器,则写true
lease-expiration-duration-in-seconds
表示eureka server至上一次收到client的心跳之后,等待下一次心跳的超时时间,在这个时间内若没收到下一次心跳,则将移除该instance。
defaultZone:
默认位置,可以修改为具体地理位置,比如:beijing,shanghai等,表示eureka服务器部署位置,需要云服务器提供

3.主程序添加注解

@EnableEurekaServer

4.提供者(服务端)

使用配置中心时,提供者需要添加Eureka Discovery Client依赖
在这里插入图片描述

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

yml文件添加eureka注册配置

eureka:
  client:
  	registry-fetch-interval-seconds: 30
    service-url:
      defaultZone: http://eureka1:2001/eureka

eureka.client.registry-fetch-interval-seconds: 30
拉取注册信息间隔时间,默认30秒

5.修改hosts文件,添加eureka域名映射

在这里插入图片描述

6.关于eureka的高可用

只要服务端有两个以上服务器
且eureka的yml文件中

eureka:
	client:
		register-with-eureka: true
    	fetch-registry: true

两个都为true,即可实现高可用,默认轮询

7.关于eureka集群的搭建

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.eureka执行参数总结

注册

1.服务启动时,就会连接eureka进行注册
2.如果注册失败,会一次次反复尝试,直到成功为止
拉取

1.每30秒,拉取更新一次注册地址表
2.一个新的服务注册后,其他服务不能立即感知新服务的地址,需要最长等30秒,才能更新新的地址表
心跳

1.每30秒发送一次心跳数据
2.连续丢失3次心跳数据,会删除这个服务的注册信息
自我保护模式(与zookeeper的主要区别)

3.15分钟内, 85%的服务器出现心跳异常,eureka会认为网络不稳定,会进入自我保护模式
4.自我保护模式下,会保护所有服务的注册信息,会不删除
5.直到恢复正常后,会自动退出保护模式,恢复正常

9.eureka和zookeeper的区别

eureka
1.AP - 强调可用性,和分区容错性
2.集群 - 对等结构
zookeeper
1.CP - 强调一致性,和分区容错性
2.集群 - 主从结构

ribbon

ribbon提供了负载均衡和重试功能,它底层是使用RestTemplate进行Rest api调用
RestTemplate
需要在主程序创建RestTemplate实例
RestTemplate是SpringBoot提供的一个Rest远程调用工具
它的常用方法:
1.getForObject() - 执行get请求
2.postForObject() - 执行post请求

负载均衡:

1.起步依赖

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

2.设置@LoadBalanced

@LoadBalanced负载均衡注解,会对RestTemplate实例进行封装,创建动态代理对象,并切入(AOP)负载均衡代码,把请求分发到集群中的服务器
例:

package cn.tedu.sp06;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@EnableDiscoveryClient
@SpringBootApplication
public class Sp06RibbonApplication {
   
	
	@LoadBalanced //负载均衡注解
	@Bean
	public RestTemplate getRestTemplate() {
   
		return new RestTemplate();
	}

	public static void main(String[] args) {
   
		SpringApplication.run(Sp06RibbonApplication.class, args);
	}

}

3.访问路径

访问路径设置为注册中心记录的服务id
在这里插入图片描述

@GetMapping("/item-service/{orderId}")
	public JsonResult<List<Item>> getItems(@PathVariable String orderId) {
   
	    //这里服务器路径用 service-id 代替,ribbon 会向服务的多台集群服务器分发请求
		return rt.getForObject("http://item-service/{1}", JsonResult.class, orderId);
	}

访问即可,ribbon会把请求轮询发送到服务端口上

重试:

1.起步依赖

<dependency>
	<groupId>org.springframework.retry</groupId>
	<artifactId>spring-retry</artifactId>
</dependency>

2.yml文件配置

ribbon:
  MaxAutoRetriesNextServer: 2
  MaxAutoRetries: 1
  OkToRetryOnAllOperations: true

3.主程序设置RestTemplate的请求工厂超时属性

package cn.tedu.sp06;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;

@EnableDiscoveryClient
@SpringBootApplication
public class Sp06RibbonApplication {
   

	@LoadBalanced
	@Bean
	public RestTemplate getRestTemplate() {
   
		SimpleClientHttpRequestFactory f = new SimpleClientHttpRequestFactory();
		f.setConnectTimeout(1000);
		f.setReadTimeout(1000);
		return new RestTemplate(f);
		
		//RestTemplate 中默认的 Factory 实例中,两个超时属性默认是 -1,
		//未启用超时,也不会触发重试
		//return new RestTemplate();
	}

	public static void main(String[] args) {
   
		SpringApplication.run(Sp06RibbonApplication.class, args)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值