Spring Cloud之Eureka与Ribbon学习简单笔记

SpringCloud介绍

微服务,为了更好的创建项目组织结构、更高效的项目的迭代效果、更优良的架构设计,就需要使用微服务的架构思想,来对项目进行搭建或者重构。

1.服务的注册与发现组件:Eureka  

搭建一个eureka注册中心,将eureka作为一个项目启动,启动后这就是一个eureka的注册中心。

步骤一:

引入依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

 

 

步骤二:

编写配置文件

spring:
  application:
    name: hello-spring-cloud-eureka

server:
  port: 8761

eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

 

 

步骤三:启动上加上注解

@EnableEurekaServer
@SpringBootApplication
public class QfSpringCloudNetflixEurekaServerApplication {

 

 

 对于eureka来说,会有两个身份。

    身份一:服务器   使用的依赖:eureka-server    使用的注解: @EnableEurekaServer

         registerWithEureka: false
         fetchRegistry: false

   身份二:客户端   使用的依赖eureka-discovery-client

       服务的提供者  使用的注解:@EnableEurekaClient

       服务的消费者  使用的注解:@EnableDiscoveryClient

创建服务的提供者

 

Spring Cloud之Eureka与Ribbon学习简单笔记

步骤一: 引入依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

 

 

步骤二:编写配置文件

spring:
  application:
    name: hello-spring-cloud-service-admin

server:
  port: 8762

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

 

 

步骤三:使用注解

@EnableEurekaClient
@SpringBootApplication
public class QfSpringCloudNetflixEurekaServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(QfSpringCloudNetflixEurekaServiceApplication.class, args);
    }

}

 

创建服务的消费者——Ribbon

Ribbon是一个使用http来进行通信的,能够实现负载均衡效果的客户端工具。要实现http通信的话需要使用RestTemplate类。

 

步骤一:引入依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

 

 

 

步骤二:编写配置文件

spring:
  application:
    name: hello-spring-cloud-web-admin-ribbon

server:
  port: 8763

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

 

 

步骤三:

打上注解

@EnableDiscoveryClient
@SpringBootApplication
public class QfSpringCloudNetflixEurekaConsumerRibbonApplication {}

 

 

Spring Cloud之Eureka与Ribbon学习简单笔记

Spring Cloud之Eureka与Ribbon学习简单笔记

Eureka详解

  1. 心跳及自我保护

注册到Eureka注册中心的服务需要持续的发送心跳包以续约自己的服务,防止被剔除。

Spring Cloud之Eureka与Ribbon学习简单笔记

 

  1. Eureka中服务的注册、调用、管理等等细节

 

  • Spring Cloud之Eureka与Ribbon学习简单笔记
  • Ribbon——客户端负载均衡的组件

2.Ribbon的介绍

如何在idea里面同时创建出一个服务的集群。

Spring Cloud之Eureka与Ribbon学习简单笔记

  1. 什么是Ribbon?

         实现客户端的负载均衡的工具。Ribbon客户端组件提供了一系列完善的配置,比如超时、重试等等。

         Ribbon会基于某种规则进行负载均衡,轮询、随机等等。Ribbon也可以实现我们自己定义的负载均衡算法。

 

客户端的负载均衡

Spring Cloud之Eureka与Ribbon学习简单笔记        

 

2.Ribbon进行负载均衡的详细过程

Spring Cloud之Eureka与Ribbon学习简单笔记

 

  1. Ribbon的负载均衡策略

         配置Ribbon的负载均衡策略

        在配置类中,去创建出一个IRule对象,IRule不同的实现类就是不同的负载均衡策略。

@Configuration
public class MyConfig {



    @LoadBalanced
    @Bean
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }

    @Bean
    public IRule MyRule(){
        return new RandomRule();
    }


}

 

如果ribbon中的服务地址列表中某一个服务下线了,那么ribbon会去重新获取eurekaServer上的新的地址列表。

此时地址列表就更新了,如果更新后的地址列表依然有服务不能服务,那么ribbon就会在自己的地址列表中把该服务的地址去除。每隔10秒钟,ribbon又会进行一次与eurekaServer之间的对地址列表进行更新。于是下线的服务就不会被访问到。

 

  1. RandomRule  随机选择一个Server
  2. RetryRule   如果访问某个server不成功,那么就会一直重试。
  3. RoundRobinRule 轮询访问每一个Server
  4. WeightedResponseTimeRule 根据响应时间加权,响应时间越长,权重越小,被选中的概率越低。