微服务基本组成
Ribbon
简介
SpringCloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡工具,主要是提供客户端的软件负载均衡算法和服务调用,一句话就是负载均衡+RedisTemplate调用
Ribbon本地负载均衡和Nginx服务端负载均衡区别
- Nginx是服务器负载均衡,客户端所有请求都会交给Nginx,然后由Nginx实现转发请求,负载均衡由服务端调用
- Ribbon本地负载均衡,在调用服务接口时候,会在注册中心上获取注册信息服务列表之后缓存到JVM本地,从而在本地实现RPC远程服务调用技术
新版的Eureka-Client已经自带了Ribbon了,不用再引入
RedisTemplate
getForObject/postForObject方法:返回对象为响应体中数据转化成的对象,基本上可以说是Json
getForEntity/postForEntity方法:返回对象为ResponseEntity对象,包含响应头,响应码等相关信息
1 2 3 4 5 6 7 8 9 10
| @Configuration public class ApplicationContextConfig{ @Bean @LoadBalanced public RestTemplate getRestTemplate() { return new RestTemplate(); } }
|
IRule
Ribbon自带负载均衡算法接口

| 名称 |
负载均衡方式 |
| RoundRobinRule |
轮询 |
| RandomRule |
随机 |
| RetryRule |
先按照RoundRobinRule的策略获取服务 如果获取服务失败则在指定时间内会进行重试 |
| WeightedResponseTimeRule |
对RoundRobinRule的扩展,响应速度越快的实例选择权重越大,越容易被选择 |
| BestAvailableRule |
会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务 |
| AvailabilityFilteringRule |
先过滤掉故障实例,再选择并发较小的实例 |
| ZoneAvoidanceRule |
默认规则,复合判断server所在区域的性能和server的可用性选择服务器 |
基本使用
修改Ribbon默认的负载均衡方式配置,不能和主启动类在一个包下,即不能被@ComponentScan扫描到
自定义规则
1 2 3 4 5 6 7 8
| @Configuration public class MySelfRule { @Bean public IRule myRule(){ return new RandomRule(); } }
|
主启动类上配置注解
1 2 3 4 5 6 7 8 9
| @SpringBootApplication @EnableEurekaClient
@RibbonClient(name = "CLOUD-PAYMENT-SERVICE",configuration = MySelfRule.class) public class OrderMain80 { public static void main(String[] args) { SpringApplication.run(OrderMain80.class, args); } }
|
负载均衡

OpenFeign
简介
Feign是一个声明式WebService客户端,使用Feign能让编写WebService客户端更简单
它的使用用方法是定义一个服务接口然后在上面添加注解,Feign也支持可拔插式的编码器和解码器。SpringCloud对Feign进行了封装,使其支持了SpringMVC标准注释和HTTPMessageConverters,Feign可以与Eureka和Ribbon组合使用来负载均衡


使用
导入pom
1 2 3 4
| <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
|
启动类开启
1 2 3 4 5 6 7
| @SpringBootApplication @EnableFeignClients public class FeignOrderMain80 { public static void main(String[] args) { SpringApplication.run(FeignOrderMain80.class, args); } }
|
配置接口类
1 2 3 4 5 6 7 8 9
| @Component @FeignClient("CLOUD-PAYMENT-SERVICE") public interface PaymentFeignService {
@GetMapping("/payment/select/{id}") CommonResult<Payment> getPaymentById(@PathVariable("id") long id); }
|

超时配置
OpenFeign默认等待的时间是1秒钟,超时就报错,因为OpenFeign默认集成了Ribbon,有负载均衡的功能,所以可以在yml文件中设置超时等待时间
1 2 3 4 5
| ribbon: ReadTimeout: 5000 ConnectTimeout: 5000
|
日志增强
| 级别 |
解释 |
| NONE |
默认,不显示日志 |
| BASIC |
仅记录请求方法、URL、响应状态码及执行时间 |
| HEADERS |
除了BASIC中定义的信息外,还有请求和响应的头信息 |
| FULL |
除了HEADERS中的信息外,还有请求和响应的正文及元数据 |
设置配置类
1 2 3 4 5 6 7
| @Configuration public class FeignConfig { @Bean Logger.Level feignLoggerLevel(){ return Logger.Level.FULL; } }
|
添加yml
1 2 3 4
| logging: level: top.jtxyh.feign.service.PaymentFeignService: debug
|
相关文章
SpringCloud
服务注册与发现
服务降级
服务网关
服务配置和服务总线
Stream消息驱动
SpringCloud-OpenFeign问题
SpringCloud-GateWay工具类
DockerCompose常用软件配置
SpringQuartz动态定时任务