微服务基本组成
Ribbon
简介
SpringCloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡工具,主要是提供客户端的软件负载均衡算法和服务调用,一句话就是负载均衡+RedisTemplate调用
Ribbon本地负载均衡和Nginx服务端负载均衡区别
- Nginx是服务器负载均衡,客户端所有请求都会交给Nginx,然后由Nginx实现转发请求,负载均衡由服务端调用
- Ribbon本地负载均衡,在调用服务接口时候,会在注册中心上获取注册信息服务列表之后缓存到JVM本地,从而在本地实现RPC远程服务调用技术
新版的Eureka-Client已经自带了Ribbon了,不用再引入
RedisTemplate
getForObject/postForObject方法:返回对象为响应体中数据转化成的对象,基本上可以说是Json
getForEntity/postForEntity方法:返回对象为ResponseEntity对象,包含响应头,响应码等相关信息
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 
 | @Configurationpublic 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扫描到
自定义规则
| 12
 3
 4
 5
 6
 7
 8
 
 | @Configurationpublic class MySelfRule {
 @Bean
 public IRule myRule(){
 
 return new RandomRule();
 }
 }
 
 | 
主启动类上配置注解
| 12
 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
| 12
 3
 4
 
 | <dependency><groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-openfeign</artifactId>
 </dependency>
 
 | 
启动类开启
| 12
 3
 4
 5
 6
 7
 
 | @SpringBootApplication@EnableFeignClients
 public class FeignOrderMain80 {
 public static void main(String[] args) {
 SpringApplication.run(FeignOrderMain80.class, args);
 }
 }
 
 | 
配置接口类
| 12
 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文件中设置超时等待时间
| 12
 3
 4
 5
 
 | ribbon:
 ReadTimeout:  5000
 
 ConnectTimeout: 5000
 
 | 
日志增强
| 级别 | 解释 | 
| NONE | 默认,不显示日志 | 
| BASIC | 仅记录请求方法、URL、响应状态码及执行时间 | 
| HEADERS | 除了BASIC中定义的信息外,还有请求和响应的头信息 | 
| FULL | 除了HEADERS中的信息外,还有请求和响应的正文及元数据 | 
设置配置类
| 12
 3
 4
 5
 6
 7
 
 | @Configurationpublic class FeignConfig {
 @Bean
 Logger.Level feignLoggerLevel(){
 return Logger.Level.FULL;
 }
 }
 
 | 
添加yml
| 12
 3
 4
 
 | logging:level:
 
 top.jtxyh.feign.service.PaymentFeignService: debug
 
 | 
相关文章
     
    SpringCloud
    服务注册与发现
    服务降级
    服务网关
    服务配置和服务总线
    Stream消息驱动
    SpringCloud-OpenFeign问题
    SpringCloud-GateWay工具类
    DockerCompose常用软件配置
    SpringQuartz动态定时任务