SpringCloud及其五大常用组件之Eureka和Zuul

1.springcloud简介

SpringCloud是Spring旗下的项目之一,它是微服务架构的一种实现方式。

官网地址:http://projects.spring.io/spring-cloud/

Spring最擅长的就是集成,把世界上最好的框架拿过来,集成到自己的项目中。

SpringCloud也是一样,它将现在非常流行的一些技术整合到一起,实现了诸如:配置管理,服务发现,智能路由,负载均衡,熔断器,控制总线,集群状态等等功能。其主要涉及的组件包括:

Netflix:

  • Eureka:注册中心
  • Zuul:服务网关
  • Ribbon:负载均衡
  • Feign:服务调用
  • Hystrix:熔断器

2.Eureka

废话步多说,直接上图!

首先,Eureka是一个注册中心,和zookeeper功能类似,其中不同的一点是zookeeper是一个软件,启动直接可以使用,而Eureka是需要我们自己开发的。

下面对开发一个Eureka注册中心进项简单的解析:

1.首先一个简单的Eureka注册中心只需要一个依赖

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

2.其次,编写一个启动类,该类上加上一个注解

@SpringBootApplication
@EnableEurekaServer         //开启Eureka注册服务
public class EurekaServer {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServer.class, args);
    }
}

3.最后,编写该项目基本的配置文件

server:
  port: 10086                   #端口号
spring:
  application:
    name: eureka-server # 应用名称,会在Eureka中作为服务的id标识(serviceId)
eureka:
  client:
    service-url: # EurekaServer的地址,现在是自己的地址,如果是集群,需要写其它Server的地址。
      defaultZone: http://127.0.0.1:10086/eureka    #注册的地址,如果是集群,应该用,隔开
    register-with-eureka: false # 不注册自己
    fetch-registry: false #不拉取服务

这样一个简单的Eureka就完成了,可以启动服务,访问http://127.0.0.1:10086,查看在该注册中心上注册的以及服务的基本信息

2.zuul

再来一张图

{{Snipaste_2019-12-22_21-33-57.png(uploading...)}}

这可以看出Zuul在整个架构中扮演着什么样的角色,其实zuul的主要作用有两个:路由分发,和过滤

和Eureka相同,Zuul同样需要我们自己来开发

1.创建一个model,一个Zuul的的服务端应该导入下面这个依赖

<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
        </dependency>
</dependencies>

2.编写启动类,这里要注意的是要打上@EnableZuulProxy开启zuul的网关功能

@SpringBootApplication
@EnableZuulProxy // 开启Zuul的网关功能
@EnableDiscoveryClient//开启Eureka的客户端发现
public class ZuulApplication {

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

3.编写配置文件

server:
  port: 10010 #服务端口
spring: 
  application:  
    name: api-gateway #指定服务名
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka        #配置Eureka的地址,将zuul会代理Eureka上注册的服务
zuul:
  prefix: /api # 添加路由前缀
  routes:
    user-service: /user-service/** # 这里是映射路径

这里的user-service在Eureka上注册的一个服务,这里配置了他的映射路径。路径就要以/api/user-service开头的请求都会被分发到该服务上。

Zuul是集成了另外一个组件负载均衡的组件Ribbon,所以,如果Eureka上有两个名称为user-service的服务,可以自动的进行负载均衡,默认的策略是轮询

熔断机制

Zuul还集成了Hystix熔断机制。但是所有的超时策略都是走的默认值,比如熔断的超时时间只有1S,也就是说,访问一个服务,如果1s没有响应,就判定为异常,我们也可以自己设置超时时间

hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 6000

猜你喜欢

转载自www.cnblogs.com/changchangchang/p/12081372.html