Spring服務發現、動態路由、斷路器

服務發現

  • 服務發現是Eureka的服務器,引入這個服務,在Application上加入 @EnableEurekaServer即可,無需任何其他操作。
  • 每個服務配置一個application name,方便區分。
  • 多個可以構建成集羣,相互註冊。
spring:
  application:
    name: eureka1-server
  profiles: first
server:
  port: 9001
eureka:
  instance:
    hostname: eureka1
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://eureka2:9002/eureka/,http://eureka3:9003/eureka/

服務器註冊

  • 註冊只要在Application上加上 @EnableDiscoveryClient即可
  • 同樣需要一個ApplicationName
  • 需要指明有哪些euraka註冊服務器可用
eureka:
  client:
    service-url:
      defaultZone: http://eureka1:9001/eureka/,http://eureka2:9002/eureka/,http://eureka3:9003/eureka/

動態路由

  • 使用動態路由,原因是前面調用方,並不想知道哪些具體的服務可用,對調用方來說最好一個地址就可以。
  • 動態路由類似Nginx的作用,對服務進行反向代理。
  • Zuul可以根據url配置哪些url使用哪些服務,而這些服務可以是eureka上的服務,這樣就實現了動態路由。
  • Application加上@EnableZuulProxy即可
  • 配置路由規則
#route test1
zuul.routes.test1.path=/test1/**
zuul.routes.test1.serviceId=TEST1

也可以用

zuul.routes.test1.url=http://localhost

我傾向於用前者,這樣可以利用eureka的動態服務表
* 使用eureka服務獲取服務列表

eureka.client.service-url.defaultZone=http://eureka1:9001/eureka/,http://eureka2:9002/eureka/,http://eureka3:9003/eureka/
  • 這裏有個小問題,服務註冊到eureka上後,名稱都變成了大寫,在zuul裏面的serviceId也必須大寫,否則找不到

  • 很顯然,zuul可以配置多個實現負載均衡和故障轉移。

  • zuul的可用性也是個問題。如果有高可用的負載均衡器,可以在前面放一個,調用方訪問負載均衡器,這樣一個zuul掛了就自動故障遷移了。比如一些雲服務提供的SLB

斷路器

  • 可以在服務不可用或者延遲很大的時候,直接fail,避免系統雪崩。
  • 可以用在遠程調用上,也可以用在普通方法上。
  • @FeignClient直接支持斷路器
  • @HystrixCommand 標註一個斷路器

FeignClient

註解式的遠程REST調用,把調用轉換成一個接口,而不是RestTemplate調用。
* 註解式聲明REST調用
* 直接和Eureka Server接通,調用上面的服務。
* 支持斷路器
* @EnableEurekaClient 從Eureka上獲取服務列表
* @EnableFeignClients 支持FeigeClients
* @FeignClient(value = “test1”,fallback = TestClientFallback.class) 支持Fallback
* Java調用REST,首選用FeignClient
* 其他程序比如php,通過zuul調用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章