Springcloud几大组件笔记总结

一、 Eureka

使用场景: 微服务架构的各个服务系统部分可能分布在多台机器上,Eureka的作用就是使各个服务直接能够相互调用。
原理:每个服务都集成了一个Eureka Client组件,这个组件将当前的服务信息和端口号发送给Eureka Server服务注册与发现中心。Eureka Server:注册中心,里面有一个注册表,保存了各个服务所在的机器和端口号。反过来,Eureka Client可以拉取注册中心的注册表,了解其他服务的端口服务。

二、 Feign

Feign的使用很简单,有以下几步:

1、添加依赖

2、启动类添加 @EnableFeignClients 注解支持

3、建立Client接口,并在接口中定义需调用的服务方法

4、使用Client接口。

用注解定义一个 FeignClient接口,然后调用那个接口就可以了。人家Feign Client会在底层根据你的注解,跟你指定的服务建立连接、构造请求、发起靕求、获取响应、解析响应,等等。 最后还需要在服务消费模块这里的主启动类开启我们的Feign,并且扫描我们另一个模块下的Feign服务。
具体代码步骤:

  1. 启动类添加 @EnableFeignClients 注解支持。
  2. 在创建的FeignClient接口中,我们@FeignClient后面的name是我们微服务模块注册的服务名字。(使我们需要调用的接口在服务注册中心注册的名字)。抽象方法的注解、方法签名要和提供服务的方法完全一致。即接口中对应的@PostMapping("/")和@GetMapping("/")为需要调用的接口中的映射地址。
  3. 然后创建相应的服务消费模块Controller层,将Feign的service注入实例,就可以调用了。
    下面是消费者调用feign接口实现服务请求的流程图:
  4. SpringCloud还有维护吗 springcloud不更新了吗_java

具体学习地址:.
详细代码解释:.

三、 Ribbon(rest+ribbon)

在用到负载均衡之前,先要到eureka中获取相关的服务,所以我们这一块依然需要用到eureka,但eureka中已经内置集成了ribbon,所以在pom文件中,并不需要显示引入ribbon的依赖。
Ribbon配合RestTemplate 来消费者到生产服务的负载均衡。
相关步骤:
1)配置类中,在获取RestTemplate对象的时候加入Ribbon的配置信息。

@Bean(name = "ribbonRestTemplate")
@LoadBalanced(负载均衡)
RestTemplate ribbonRestTemplate() {
    return new RestTemplate();
}

2)创建要消费的消费方,并且注册到eurka注册中心。
restTemplate中的方法可以通过url消费注册中心的相关服务,访问了不同的端口的服务实例。(负载均衡)

负载均衡:服务消费者调用服务生产者的访问频率是平均的。
在消费者访问多个服务的接口时候,服务是交替循环被消费的。
默认负载均衡算法是轮询算法,一个服务有多台机器上运行时按顺序每次请求分发到各个服务器上。

Ribbon和Feign调用其他服务的前提是这些服务在Eureka服务注册中心注册过了,且必须要知道服务在注册中心注册的名字。
两者之间的区别:http://blog.sina.com.cn/s/blog_1645e034e0102ygav.html

Ribbon是和Feign以及Eureka紧密协作,完成工作的,具体如下:
首先Ribbon会从 Eureka Client里获取到对应的服务注册表,也就知道了所有的服务都部署在了哪些机器上,在监听哪些端口号。
然后Ribbon就可以使用默认的Round Robin算法,从中选择一台机器
Feign就会针对这台机器,构造并发起请求。

ribbon和feigin以及eureka搭配使用流程图:

SpringCloud还有维护吗 springcloud不更新了吗_负载均衡_02

四、 Hystrix:

解决微服务架构中恐怖的服务雪崩问题
具体针对于消费者对服务请求失败的熔断、隔离、降级。
针对于每个服务安排了一个个线程池,每个服务的调用请求不会相互调用影响。
具体服务上添加fallback方法或者类

1)简单整合Hystrix
在消费者请求服务的方法上加@HystrixCommand(fallbackMethod = “getDefaultUser”)
然后写出回调方法

@HystrixCommand(fallbackMethod = "")
    @RequestMapping("/sayHello")
    public String getUser() {
        return restTemplate.getForObject("http://user-api/sayHello", String.class);
    }

    private String getDefaultUser() {
        System.out.println("熔断,默认回调函数");
        return "{\"username\":\"admin\",\"age\":\"-1\"}";
    }

2)基于Feign使用Hystrix
2.1 引入依赖
2.2 在消费者的属性配置文件中添加:
feign:
hystrix:
enabled: true
2.3 在Feign接口中的注解中添加fallback类
@FeignClient(value = “user-api”, fallback = UserClientFallback.class)
2.4 添加fallback回调类
UserClientFallback回调类:

package com.cjs.example.fallback;

import com.cjs.example.service.UserClient;
import org.springframework.stereotype.Component;

@Component
public class UserClientFallback implements UserClient {
    @Override
    public String sayHello() {
        return "Oh! Error!!!";
    }
}

学习网站1: .
学习网站2:.

五、 Gateway

对于浏览器到服务器的请求做统一的降级、限流、认证授权、安全,然后网关转发请求给对应的服务

总结:springcloud的总体流程:

1)每个服务之间会有一个Eureka Client组件,这些组件会注册到Eureka Server中心的注册表。注册表中包含了各个服务的端口和名字。反过来,各个服务也会在Eureka Server中发现拉取其他的服务。
2)服务之间调用的过程中可以采取两种方式:基于Ribbon+rest实现通信 基于Feign实现
基于Ribbon+rest会实现负载均衡,消费者会从多个服务中选择一种服务进行消费。
基于Feign的动态代理机制,创建相关的接口类FeignClient,调用此接口于指定的某个服务进行建立连接。
3)熔断机制Hystrix
针对于每个服务出现故障而出现整体服务功能雪崩的情况,使用Hystrix的服务熔断,降级和隔离。
针对于每个服务安排了一个个线程池,每个服务的调用请求不会相互调用影响。
基于Ribbon,在调用具体方法接口的上面添加@HystrixCommand(fallbackMethod = “***”),在添加具体的回调处理方法。
基于Feign,在FeignClient接口类的注解添加fallback回调类,实现服务的熔断降级处理
4)Gateway
对于前段的请求用网关统一进行降级、限流、认证授权、安全,然后把这些请求转发给对应的服务。