美文网首页
5、spring cloud zuul

5、spring cloud zuul

作者: KissGoodby | 来源:发表于2018-11-18 23:43 被阅读0次

服务网关

Spring Cloud Zuul路由是微服务架构的不可或缺的一部分,提供动态路由,监控,弹性,安全等的边缘服务。Zuul是Netflix出品的一个基于JVM路由和服务端的负载均衡器。

服务网关充当服务客户端和被调用的服务之间的中介,服务网关从服务客户端调用中分离出路径,并确定服务客户端正在尝试调用哪个服务。服务网关充当应用程序内所有微服务调用的入站流量的守门人,有了服务网关,服务客户端永远不会直接调用单个服务的URL,而是将所有调用都放到服务网关上面了。

服务网关的关注点:

  • 静态路由:服务网关将所有的服务调用放置在单个URL和API路由的后面
  • 动态路由:服务网关可以检查传入的服务请求,根据来自传入的数据和服务调用者的身份执行职能的动态路由
  • 验证和授权:由于所有的服务都要经过服务网关进行路由,所以服务网关是验证和授权的自然场所
  • 数据收集和日志记录:与验证和授权是同样的道理

搭建zuul服务

  1. 创建zuul服务,添加maven依赖
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zuul</artifactId>
        </dependency>
  1. 在spring boot启动类添加@EnableZuulProxy注解,表示使用zuul反向代理功能
@SpringBootApplication
@EnableZuulProxy
public class ZuulAppllication {

    public static void main(String[] args) {
        SpringApplication.run(ZuulAppllication.class, args);
    }
}
  1. 整合eureka,配置application配置文件
spring:
  application:
    name: zuul-server
server:
  port: 8822


#整合eureka
eureka:
  instance:
    prefer-ip-address: true #注册服务的IP
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka
    register-with-eureka: true
    fetch-registry: true
  1. 启动服务,访问http://<zuul server>/routes,可以得到服务路由
{
    "/api/provider-server/**": "provider"
}

这里我仅仅提供了一个服务,所有就只有一个条路由信息

  1. 这里说明一下,除了使用eureka的服务路由关系外,还可以自己手动设置路由,使用zuul.routes属性,例如
zuul:
  routes:
    provider: /provider-server/**   #手动定义路由映射

这样就手动的构造了一条路由信息,访问http://<zuul server>/routes结果为:

{
    "/provider-server/**": "provider",
    "/consumer-server/**": "consumer-server"
}

这里"/provider-server/**": "provider",就是刚才手动设置的路由信息,还可以设置服务的前缀,例如设置服务前缀为api

zuul:
  prefix: /api  #设置服务前缀
  ignored-services: '*' # 排除所有eureka的路由
  routes:
    provider: /provider-server/** #手动添加路由

这个时候访问http://<zuul server>/routes结果为:

{
    "/api/provider-server/**": "provider"
}
  1. 使用静态URL手动设置路由
zuul:
  routes:
    licensestatis:
      path: /baidu/**
      url: http://www.baidu.com #配置静态路由

访问http://<zuul server>/routes结果为:

{
    "/baidu/**": "http://www.baidu.com",
    "/provider-server/**": "provider",
    "/consumer-server/**": "consumer-server",
}

"/baidu/**": "http://www.baidu.com"就是设置的静态路由

  1. 关于zuul和服务超时
    zuul使用netflix的Hystrix和Ribbon库,来帮助防止长时间的服务调用影响服务网关的性能。在默认情况下,对于任何超过1s时间的请求调用,zuul将终止并返回一个HTTP 500错误,使用hystrix.commad.defult.execution.isolation.thread.timeoutInMillseconds属性来设置zuul的默认超时时间。如果需要为特定的服务设置超时时间,只需要将defult换成服务ID名称就行,例如修改调用provider-server的时间,只需要在application配置文件中添加hystrix.commad.provider-server.execution.isolation.thread.timeoutInMillseconds=3000即可。
    对于Ribbon也有一个默认超时时间为5s,通过设置servername.ribbon.ReadTimeout来修改默认值。

相关文章

网友评论

      本文标题:5、spring cloud zuul

      本文链接:https://www.haomeiwen.com/subject/iymgfqtx.html