SpringCloud(五):註冊zuul反向代理的幾種配置形式

前提

  • Eureka:服務端
  • User: 客服端(microservice-provider-user)
  • Zuul: 客服端(microservice-gateway-zuul)

Embedded Zuul Reverse Proxy

註冊zuul反向代理的幾種配置形式

Zuul默認是反向代理全部註冊到eureka上的微服務。
路徑必須具備能夠指定爲ant樣式模式的路徑,所以/myusers/*僅匹配一個級別, 但/myusers/**是分層匹配的。java

第1種配置形式

  • 忽略反向代理全部微服務,僅代理配置了的微服務
zuul:
      ignoredServices: '*'
      routes:
        microservice-provider-user: /myusers/**
複製代碼
  • 忽略反向代理指定微服務
zuul:
      ignoredServices: microservice-provider-goods
      routes:
        microservice-provider-user: /myusers/**
複製代碼

第2種配置形式

  • 反向代理microservice-provider-user微服務,路徑是/myusers/**
    • aaaa這個名字任意,只要是惟一的就行
    • 爲了方便測試,忽略microservice-provider-goods微服務的反向代理
    zuul:
          ignoredServices: microservice-provider-goods
          routes:
            aaaa:
              path: /myusers-path/**
              serviceId: microservice-provider-user
    複製代碼

注: 示例意味着對/myusers的HTTP調用將轉發到microservice-provider-user服務。
正則表達式

第3種配置形式

示例意味着對/myusers-url/**的HTTP調用將經過請求microservice-provider-user服務的url地址請求microservice-provider-user服務api

zuul:
  routes:
    abc:
      path: /myusers-url/**
      url: http://192.168.85.1:7900/
複製代碼

第4種配置形式

zuul:
  routes:
    abc:
      path: /myusers-url/**
      # 這裏要用service-id而不是url
      service-id: microservice-provider-user
# 禁用掉ribbon的eureka使用
ribbon:
  eureka:
    enabled: false
# 這邊是ribbon要請求的微服務的serviceId
microservice-provider-user:     
  ribbon:
    listOfServers: http://localhost:7900,http://localhost:7901
複製代碼

第5種配置形式

經過修改ZuulApplication.java中的代碼,設置正則表達式,調用PatternServiceRouteMapper進行注入bash

@Bean
	public PatternServiceRouteMapper serviceRouteMapper() {
		return new PatternServiceRouteMapper("(?<name>^.+)-(?<version>v.+$)", "${version}/${name}");
	}
複製代碼

==注意:== 此種方式要知足以下這種條件,microservice-provider-user服務的名字應該修改爲microservice-provider-user-v1app

第6種配置形式

  • 標準配置
    在application.yml爲路徑增長一個映射前綴
    • 全局配置
    zuul:
      prefix: /user
      # 剝掉前綴,默認是true
      strip-prefix: false
    複製代碼
    • 局部配置:(只針對aaa這個路由)
    zuul:
      routes:
        aaa: 
          path: /myusers/**
          # 剝掉前綴,默認是true
          strip-prefix: false
    複製代碼
    解釋:
    path後填寫的是代理的服務的訪問路徑;
  • 例如:(以全局配置爲例)
    此處代理的是microservice-provider-user微服務;
    • 其不配置前綴,正常的訪問形式是:
      localhost:8010/microservice-provider-user/user/1
      複製代碼
      正常的訪問形式下,後臺請求路徑是:
      /user/1
      複製代碼
      因此,此處的path應該填寫:/user
    • 當stripPrefix是 false時,訪問路徑因設置path而變成:
      localhost:8010/user/microservice-provider-user/1
      複製代碼
      此時,後臺請求路徑未剝離前綴user,故請求路徑是:/user/1
      若是前綴設置成其它值,由於不會剝離前綴,故後臺請求路徑會變成/api/user/1;從而致使訪問失敗
    • 當stripPrefix是 true時,訪問路徑因設置path而變成:
      localhost:8010/user/microservice-provider-user/user/1
      複製代碼
      此時,僅僅是在訪問路徑中加了一個前綴
  • 適用場景:
    原來的homepage是:
    localhost:8010
    複製代碼
    如今的homepage根據業務需求設置了classpath修改爲了:
    localhost:8010/api
    複製代碼
    那麼此時就須要對application.yml進行如上配置

第7種配置形式

  • 在application.yml修改
    此處的路由生效順序是(從上到下):先users在legacy
zuul:
  routes:
    users:
      path: /myusers/**
    legacy:
      path: /**
複製代碼

==注:==
ide

  • 若是須要對代理的路由保留默認排序,則須要使用.yml文件;若是使用.properties文件,則容易形成排序不生效。
  • 若是您要使用屬性文件,則舊路徑可能最終位於用戶路徑前面,從而致使用戶路徑沒法訪問。
相關文章
相關標籤/搜索