Ribbon负载均衡服务调用
是什么?
简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。
LB负载均衡(Load Balance)是什么?
简单的说就是将用户的请求分摊地分配到多个服务上,从而达到系统的HA(高可用)。
常见的负载均衡软件有 Nginx、LVS,硬件F5等
Ribbon与Nginx的区别?
Nginx是服务器负载均衡(医院大门,对应负载多个科室),客户端所有的负载均衡都会交给Nginx,然后由Nginx实现转发请求。
Ribbon本地负载均衡(口腔科门,对应负载口腔科多个医生),在调用微服务接口时,会在服务注册中心上获取注册信息列表之后缓存到JVM本地,从而在本地实现远程服务接口调用技术。
当我们用Eureka作为服务注册中心时,明明我们未添加Ribbon依赖,为什么可以达到负载均的效果?
让我们来看一下,Eureka的Maven依赖结构图:
其实Eureka内部已近引入了Ribbon依赖
OpenFeign服务接口调用(用在服务消费者上)
Feign能干什么?
Feign旨在使编写Java Http客户端变得更容易。
前面使用Ribbon+RestTemplate时,利用RestTemplate对http请求的封装处理,形成了一套模板化的调用方法。但实际开发中,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。
Feign集成了Ribbon
利用Ribbon维护了服务列表信息,并通过轮询实现了客户端的负载均衡。而与Ribbon不同的是,通过feign只需要定义服务绑定接口且以声明的方法,优雅而简单的实现了服务调用。
Feign与OpenFeign的区别
接下来这里Feign不再具体讲解,直接上OpenFeign
引入pom依赖
<!--openFeign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
写配置
server:
port: 800
eureka:
client:
register-with-eureka: false # false表示不向注册中心注册自己
service-url:
defaultZone: http://localhost:7001/eureka
主方法
编写对应服务提供者接口
编写controller
结构总图
OpenFeign超时控制
OpenFeign默认等待1秒,超过后报错
可以在消费者这边的配置文件中配置客户端超时控制:
OpenFeign日志打印功能
Feign提供了日志打印功能。可以对Feign接口的调用情况进行监控和输出。
日志级别:
-
NONE: 默认的,不显示任何日志;
-
BASIC: 仅记录请求方法、URL、响应状态码及执行时间;
-
HEADERS: 除了BASIC中定义的信息之外,还有请求和响应的头信息;
-
FULL: 除了HEADERS中定义的信息之外,还有请求和响应的正文及元数据。
开启步骤:
1) 配置日志bean ,在客户端新建配置类,代码如下:
@Configuration
public class FeignConfig {
@Bean
Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
}
2)配置文件中配置:
logging:
level:
# feign日志以什么级别监控哪个接口
com.coderzpw.springcloud.service.PaymentFeignService: debug
3) 观察后台日志: