Nacos服务搭建系列之——(五)搭建Zuul服务

在微服务场景中,很多时候是需要使用网关的。

  1. 引入依赖
    这里主要引入3个依赖,zuul依赖,nacos的config依赖以及nacos的服务发现依赖(里面包含Nacos-Client)
<!--Zuul依赖-->
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<!--Nacos相关依赖-->
<!-- NacosConfig的依赖 -->
<dependency>
   <groupId>com.alibaba.cloud</groupId>
   <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
   <version>${spring-cloud-alibaba.version}</version>
</dependency>
<!-- Nacos服务注册发现的依赖 -->
<dependency>
   <groupId>com.alibaba.cloud</groupId>
   <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
   <version>${spring-cloud-alibaba.version}</version>
</dependency>
  1. 启动类上加上@EnableZuulProxy注解

  2. 在Nacos上配置Zuul的yml文件

zuul:
    routes:
        nacos-consumer-demo:
            service-id: nacos-consumer-demo
            strip-prefix: true
            path: /v5/**
        nacos-provider-demo:
            service-id: nacos-provider-demo
            strip-prefix: false
            path: /nacosdemo/provider/**

  #忽略所有的默认路由(即禁止通过service-id访问),让所有路由配置均维护在配置文件中,以达到网关启动的时候就默认初始化好各个路由转发的负载均衡对象
    ignored-services: '*'
    host:
    # host配置适用于routes 为url请求服务的路由方式,如果是service-id路由方式则配置ribbon
        connect-timeout-millis: 6000
        socket-timeout-millis: 6000
        max-per-route-connections: 2000
        max-total-connections: 10000
    ribbon-isolation-strategy: thread
    thread-pool:
        use-separate-thread-pools: true
        thread-pool-key-prefix: zuulgw
    FormBodyWrapperFilter:
        pre:
            disable: true
        # 开启保持原始请求参数编码
        #  force-original-query-string-encoding: true
        # 全局配置请求头参数传递,有效防止会话丢失,即由zuul转发至对应服务处理时,会将配置的请求头一同带过去,默认值"Cookie","Set-Cookie", "Authorization"
    sensitive-headers: Access-Control-Allow-Origin,Access-Control-Allow-Methods,Access-Control-Allow-Credentials
    #开启重定向转链,否则服务重定向时地址变成具体服务的地址,默认false
    #  add-host-header: true
    semaphore:
        max-semaphores: 5000

proxy:
    auth:
        load-balanced: true

#设置ribbon超时(熔断器超时必须大于负载均衡超时时间,否则不生效)
ribbon:
    #ribbon请求连接的超时时间- 限制3秒内必须请求到服务,并不限制服务处理的返回时间
    ConnectTimeout: 3000
    #请求处理的超时时间 下级服务响应最大时间,超出时间消费方(路由也是消费方)返回timeout
    ReadTimeout: 5000
#针对某个服务设置ribbon超时
nacos-consumer-demo:
    ribbon:
        ConnectTimeout: 5000
        ReadTimeout: 5000

#针对某个服务设置ribbon超时(同样的,如果匹配上服务,就不用默认的)
nacos-provider-demo:
    ribbon:
        ConnectTimeout: 5000
        ReadTimeout: 5000

##该参数用来开启重试机制,默认是关闭
spring.cloud.loadbalancer.retry.enabled: true
##对所有操作请求都进行重试
#ribbon.OkToRetryOnAllOperations: true
##对当前实例的重试次数
ribbon.MaxAutoRetries: 1
##切换实例的重试次数
ribbon.MaxAutoRetriesNextServer: 1

#设置hystrix超时(Edgware版本下default配置不生效,默认超时2秒,建议hystrix超时时间>其他超时时间配置[如ribbon])
hystrix:
    command:
        default:
            execution:
                isolation:
                    thread:
                        timeoutInMilliseconds: 5000
        # 针对某个服务设置hystrix超时(生效)如果匹配上了,就不会再用默认的超时
        nacos-consumer-demo:
            execution:
                isolation:
                    thread:
                        timeoutInMilliseconds: 10000

        # 针对某个服务设置hystrix超时(生效)如果匹配上了,就不会再用默认的超时
        nacos-provider-demo:
            execution:
                isolation:
                    thread:
                        timeoutInMilliseconds: 10000

这里注意2点:

  1. strip-prefix的使用方式,这里可以参考文章
    zuul 里面的 prefix 和 strip-prefix 怎么使用

  2. 网关超时时间的配置,这里分为Ribbon超时和Hystrix,具体配置都在上面已经注释

疑问:网上很多文章都在阐述nacos+zuul的动态路由配置,都需要重写SimpleRouteLocator类的refresh方法和locateRoutes方法,但是经过自己实验后,发现Nacos如果开启了动态刷新配置(默认开启),都能够在不需要手动重启服务的情况下,进行配置的重载。包括路由配置和超时配置

发布了25 篇原创文章 · 获赞 9 · 访问量 6624

猜你喜欢

转载自blog.csdn.net/qq_40233503/article/details/104616375