SpringCloud | Zuul(1)-服务路由

249 阅读3分钟

Zuul 实现路由、鉴权(过滤)、负载均衡、熔断

1.Zuul面向服务的路由配置

  1. 创建module Zuul-6001
  2. 配置application.yml将Zuul注册到eureka
    server:
      port: 6001
    
    eureka:
      instance:
        instance-id: Zuul-6001
        prefer-ip-address: true
      client:
        service-url:
          defaultZone: http://server7001:7001/eureka/,http://server7002:7002/eureka/,http://server7003:7003/eureka/
    
    
    

2. 解决eureka控制台中的Info页面错误问题

info:
  app.name: com.xyz.microservice
  build.artifactId: $project.artifactId$ #使用maven内置变量project.artifactId和project.version完成对变量的赋值
  build.version: $project.version$

spring:
  application:
    name: microservicezuul

```
  1. 在主启动类中增加对Zuul开启的配置
    @SpringBootApplication
    @EnableZuulProxy
    public class Zuul6001 {
    
        public static void main(String[] args) {
            SpringApplication.run(Zuul6001.class, args);
        }
    }
    
    
  2. 通过路由访问http://localhost:6001/microservice-provider/provider/list

3. Zuul路由访问映射规则(application.yml中增加配置)

  1. 对微服务名称增加对外访问的映射地址http://loclalhost:6001/mydept/provider/list
  2. zuul默认的路由规则是:微服务ID+请求路路径的方式http://localhost:6001/microservice-provider/provider/list,可以通过设置zuul.ignoredServices="*"禁止通过zuul对原微服务地址访问,只能通过映射地址访问
  3. 增加访问前缀http://localhost:6001/xyz/mydept/provider/list
  4. 如果路由ID与微服务的serviceId一致的话,可以简化配置
  5. 配置不希望被API网关路由的URL表达式
  6. 在API网关上实现本地跳转
zuul:
  prefix: /xyz #统一增加访问前缀
  ignoredServices: "*" #禁止所有的微服务通过zuul的原路径访问`http://localhost:6001/xyz/microservice-provider/provider/list`
  routes:
#    microservice-provider: /mydept/** #简化路由配置方法1:如果路由ID与微服务的serviceId一致的话
    mydept: #路由ID
      path: /mydept/**   #zuul对外提供的映射路径
      serviceId: microservice-provider  #映射对应的微服务名称
    myforward: #在API网关上实现本地跳转 `http://localhost:6001/xyz/myforward/provider/list?accessToken=1`
      path: /myforward/**
      url: forward:/local
#  ignored-patterns: /**/list  #配置不希望被API网关路由的URL表达式

同类产品比较

产品 是否阻塞 是否支持长链接
Zuul 1.x 阻塞API 不支持长链接,如websockets
SpringCloud geteway 非阻塞API 支持长链接

代码示例-github

参考