SpringCloud Alibaba入门教程二 —— 服务调用与服务容错保护

SpringCloud Alibaba Feign

Feign

Feign是Netflix开源的声明式HTTP客户端。
首先加入spring-cloud-start-openfeign依赖,并在主类上加入 @EnableFeignClients 注解。为需要调用的微服务创建接口,在上面加上 @FeignClient(name = “serviceId”)

Feign通过整合Ribbon实现了负载均衡。

Feign的组成

在这里插入图片描述

Feign细粒度配置自定义(日志级别)

在这里插入图片描述

java代码配置

配置专属的日志信息,就将配置在对应的ClientFeign中

//要配置feign的日志信息,就需要配置configuration类
@FeignClient(name = "serviceId" , configuration = feignConfiuration.class)
public interface feignClient{
	
	@GetMapping("/xxx")
	T findxxx(String param1);
}

//这个类如果加了@Configuration,就必须在主类之外的包中编写
//会涉及到父子上下文覆盖的问题
//会将所有的Feign全部都打印出来
public class feignConfiuration(){
	@Bean
	public Logger.leval leval(){
		return Logger.leval.FULL;
		//让Feign打印所有请求细节
	}
}
logger:
	leval:
		feignClient: debug #这里要配置FeignClient的路径,并且配置成debug才能显示所有FULL的日志.

细粒度配置自定义-配置文件方式

feign:
	client:
		config:
			user-center: #这里是想要调用的微服务名称
				loggerLevel: full # 级别

配置文件的方式相当于配置类

全局配置自定义

全局配置是可以将所有的Feign的日志进行配置的方式,主要有两种,第一种是使用ComponentScan进行父子上下文的扫描,进行重叠,第二种是进行全局配置。

java实现

//在主类的EnableFeignClients上加入我们之前配置的Feign配置类即可
@EnableFeignClients(default = FeignConfiguration.class)

配置文件实现

feign:
	client:
		config:
			default: #这里改成default
				loggerLevel: full # 级别

Feign支持的配置项

注解支持
在这里插入图片描述
Java配置支持

在这里插入图片描述

Feign的继承(在不同的微服务中定义相同的接口)

我们在使用微服务之间相互调用时,总会遇到这样的问题,微服务A定义了一些对外的接口,微服务B要调用这个接口中的某些方法,并且两个需要统一返回类型,如DTO。
这时如果创建一个接口,微服务A(服务提供者)实现该接口,微服务B(服务调用者)继承该接口,将这个接口建立在一个Maven项目中并将其打成jar包,在微服务A、B中都使用它,这样就可以实现微服务共通的作用。
这样带来的好处是明显的,不用额外的再去创建一些与自己业务无关的代码,又有着充足的文档,一般来说很多公司使用。
官方的建议是不要这样使用,这样会加强微服务之间的耦合程度。

多参数请求构造

如何使用Feign实现多参数请求

Feign脱离Ribbon使用(服务未注册在Nacos上)

@FeignClint(name = "xxxx" , url = "http:www.baidu.com")
public interface testBaiduClient{
	@GetMapping("")
	String index();
}
//只要写上url后,就可以调用外部的Url进行使用

RestTemplate与Feign

在这里插入图片描述
尽量使用Feign,杜绝使用RestTemplate

Feign的优化

  • 使用连接池 ( 引入HttpClient依赖 )
  • 设置相应的日志级别(不使用性能最好)

Feign常见问题总结

Feign常见问题总结

SpringCloud Alibaba Sentinel

微服务之间的调用失败,会造成级联的失败,最终导致雪崩效应。解决雪崩的方法就是使用断路器,在SpringCloud中使用Hystrix,而在SpringCloud Alibaba中使用的是Sentinel进行服务降级以及熔断策略。

常见容错方案

  1. 超时:规定一定的时间,超时没有请求到就关闭当前线程
  2. 限流:当流量超过了所设定的限制时,就将其抛出
  3. 仓壁模式:每个服务相互隔离,不阻碍其他服务的工作
  4. 断路器模式:错误率、错误次数达到一个阈值,就执行预定的策略处理。断路器三态转换(开启、关闭、半开闭)

Sentinel实现服务容错

Sentinel使用

添加依赖spring-cloud-starter-alibaba-sentinel,使用actuator提供的端点可以访问到sentinel。

Sentinel控制台

首先到https://github.com/alibaba/Sentinel/releases下载sentinel的控制台并启动对应的jar包,其次到微服务中配置。

spring:
	cloud:
		sentinel:
			transport: 
				#指定sentinel的控制台地址,小心冲突
				dashboard: 8080

控制台三种限流方式 直接(微服务级别)、关联(当关联的资源达到阈值,就限流自己)、链路(只记录指定链路上的流量 API级别)。
Warm Up(经过预热的时间才会达到阈值,适合秒杀类似的)。
排队等待:匀速排队,让请求以均匀的速度通过,阈值类型必须设置成QPS,否则无效,不是直接拒绝,而是等待。
添加@SentinelResource("xxxx"),这里要在调用的API上添加,以便于用来指定限流方式中的链路以及热点规则
热点规则中参数的类型必须是基础数据类型或者是String。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值