成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

SpringCloud組件: GateWay整合Eureka轉(zhuǎn)發(fā)服務(wù)請求

warmcheng / 1530人閱讀

摘要:單服務(wù)我們簡單編寫一個請求地址,輸出字符串信息,添加依賴如下所示配置文件如下所示服務(wù)名注冊到服務(wù)端口號配置該服務(wù)的服務(wù)名稱為,這里對應(yīng)的。

在上一篇文章Spring Cloud GateWay 路由轉(zhuǎn)發(fā)規(guī)則介紹中我們講解了SpringCloud Gateway內(nèi)部提供的斷言、謂語,讓我們可以組合更精確的業(yè)務(wù)場景進(jìn)行請求,既然SpringCloud GateWay擔(dān)任了網(wǎng)關(guān)的角色,在之前Zuul可以通過服務(wù)名進(jìn)行自動轉(zhuǎn)發(fā),SpringCloud Gateway是否可以實(shí)現(xiàn)自動轉(zhuǎn)發(fā)呢?

初始化Gateway服務(wù)

Spring Cloud Gateway可以根據(jù)配置的斷言、謂語進(jìn)行滿足條件轉(zhuǎn)發(fā),也可以自動同步服務(wù)注冊中心的服務(wù)列表進(jìn)行指定serviceId前綴進(jìn)行轉(zhuǎn)發(fā),這里的serviceId是業(yè)務(wù)服務(wù)的spring.application.name配置參數(shù)。

SpringCloud 版本控制依賴

SpringCloud的版本依賴添加到pom.xml內(nèi),如下所示:

//...

  1.8
  Greenwich.SR1



  
    
      org.springframework.cloud
      spring-cloud-dependencies
      ${spring-cloud.version}
      pom
      import
    
  

//...

我們本章使用Eureka作為服務(wù)注冊中心來完成服務(wù)請求轉(zhuǎn)發(fā)講解,需要把Spring Cloud Gateway網(wǎng)關(guān)項(xiàng)目作為一個Client注冊到Eureka Server,先來看下添加的依賴,pom.xml如下所示:

//...

  
  
    org.springframework.cloud
    spring-cloud-starter-gateway
  
  
  
    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-client
  

//....

接下來我們需要開啟Gateway服務(wù)注冊中心的發(fā)現(xiàn)配置,開啟后才能自動同步服務(wù)注冊中心的服務(wù)列表application.yml配置文件如下所示:

# 服務(wù)名稱
spring:
  application:
    name: spring-cloud-gateway
  # 開啟 Gateway 服務(wù)注冊中心服務(wù)發(fā)現(xiàn)
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true
# Eureka Server 配置
eureka:
  client:
    service-url:
      defaultZone: http://localhost:10000/eureka/
# 配置Gateway日志等級,輸出轉(zhuǎn)發(fā)細(xì)節(jié)信息
logging:
  level:
    org.springframework.cloud.gateway: debug

配置參數(shù)解釋如下所示:

spring.application.name:服務(wù)名

spring.cloud.gateway.discovery.locator.enabled:開啟SpringCloud Gateway的注冊中心發(fā)現(xiàn)配置,開啟后可自動從服務(wù)注冊中心拉取服務(wù)列表,通過各個服務(wù)的spring.application.name作為前綴進(jìn)行轉(zhuǎn)發(fā),該配置默認(rèn)為false。

eureka.client.service-url.defaultZone:配置Eureka Server默認(rèn)的空間地址

logging.level.org.springframework.cloud.gateway:設(shè)置SpringCloud Gateway日志等級為debug,用于輸出轉(zhuǎn)發(fā)的細(xì)節(jié)日志,方便查看細(xì)節(jié)流程。

注冊網(wǎng)關(guān)到Eureka

在入口類添加對應(yīng)的注解,開啟服務(wù)自動注冊,如下所示:

@SpringBootApplication
@EnableDiscoveryClient
public class SpringCloudGatewayApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringCloudGatewayApplication.class, args);
    }
}
服務(wù)注冊中心

對應(yīng)上面網(wǎng)關(guān)配置的Eureka Server的地址,我們需要添加對應(yīng)的配置,pom.xml如下所示:

//...

  
  
    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-server
  

//...

添加依賴后對Eureka Server進(jìn)行配置,配置文件application.yml如下所示:

# 服務(wù)名
spring:
  application:
    name: sample-eureka-server
# 端口號    
server:
  port: 10000

# Eureka 配置信息
eureka:
  client:
    service-url:
      defaultZone: http://localhost:${server.port}/eureka/
    fetch-registry: false
    register-with-eureka: false

這里我們修改默認(rèn)的端口號為10000,為了匹配在網(wǎng)關(guān)項(xiàng)目的配置信息,至于fetch-registryregister-with-eureka可以去我之前的文章查看,SpringCloud組件:將服務(wù)提供者注冊到Eureka集群

開啟Eureka Server

我們通過@EnableEurekaServer注解來開啟服務(wù),如下所示:

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}
網(wǎng)關(guān)、服務(wù)注冊中心我們都已經(jīng)準(zhǔn)備好了,下面我們可以編寫業(yè)務(wù)邏輯服務(wù),來驗(yàn)證SpringCloud Gateway具體是否可以根據(jù)serviceId進(jìn)行轉(zhuǎn)發(fā)請求。
單服務(wù)

我們簡單編寫一個GET請求地址,輸出字符串信息,pom.xml添加依賴如下所示:


  
  
    org.springframework.boot
    spring-boot-starter-web
  
  
  
    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-client
  

配置文件application.yml如下所示:

# 服務(wù)名
spring:
  application:
    name: user-service
# 注冊到Eureka
eureka:
  client:
    service-url:
      defaultZone: http://localhost:10000/eureka/
# 服務(wù)端口號
server:
  port: 9090

配置該服務(wù)的服務(wù)名稱為user-service,這里對應(yīng)SpringCloud GatewayserviceId。

注冊服務(wù)到Eureka
@SpringBootApplication
@EnableDiscoveryClient
@RestController
public class UserServiceApplication {
    /**
     * logger instance
     */
    static Logger logger = LoggerFactory.getLogger(UserServiceApplication.class);

    public static void main(String[] args) {
        SpringApplication.run(UserServiceApplication.class, args);
        logger.info("「「「「「用戶服務(wù)啟動完成.」」」」」");
    }

    @GetMapping(value = "/index")
    public String index() {
        return "this is user index";
    }
}

user-service提供了/index的請求地址,當(dāng)訪問時,會對應(yīng)輸出this is user index

測試服務(wù)請求轉(zhuǎn)發(fā)

接下來我們進(jìn)行驗(yàn)證,測試順序如下所示:

第一步:啟動Eureka Server

第二步:啟動SpringCloud Gateway

啟動成功后控制臺會打印響應(yīng)的注冊到Eureka的日志信息,如下所示:

DiscoveryClient_SPRING-CLOUD-GATEWAY/192.168.1.56:spring-cloud-gateway: registering service...
Netty started on port(s): 8080

SpringCloud Gateway內(nèi)部通過Netty完成WebServer的請求轉(zhuǎn)發(fā)。

第三步:啟動user-service服務(wù)

啟動成功后控制臺打印相應(yīng)注冊日志,如下所示:

DiscoveryClient_USER-SERVICE/192.168.1.56:user-service:9090: registering service...
Tomcat started on port(s): 9090 (http) with context path ""

第四步:測試訪問

SpringCloud Gateway會每間隔30秒進(jìn)行重新拉取服務(wù)列表后路由重定義操作,日志信息如下所示:

# Spring Cloud Gateway
RouteDefinition CompositeDiscoveryClient_SPRING-CLOUD-GATEWAY applying {pattern=/SPRING-CLOUD-GATEWAY/**} to Path
RouteDefinition CompositeDiscoveryClient_SPRING-CLOUD-GATEWAY applying filter {regexp=/SPRING-CLOUD-GATEWAY/(?.*), replacement=/${remaining}} to RewritePath
RouteDefinition matched: CompositeDiscoveryClient_SPRING-CLOUD-GATEWAY
# User Service
RouteDefinition CompositeDiscoveryClient_USER-SERVICE applying {pattern=/USER-SERVICE/**} to Path
RouteDefinition CompositeDiscoveryClient_USER-SERVICE applying filter {regexp=/USER-SERVICE/(?.*), replacement=/${remaining}} to RewritePath
RouteDefinition matched: CompositeDiscoveryClient_USER-SERVICE

通過上面的日志信息我們已經(jīng)可以推斷出SpringCloud Gateway映射spring.application.name的值作為服務(wù)路徑前綴,不過是大寫的,預(yù)計我們可以通過http://localhost:8080/USER-SERVICE/index訪問到對應(yīng)的信息。

訪問測試如下:

~ curl http://localhost:8080/USER-SERVICE/index
this is user index

通過網(wǎng)關(guān)訪問具體服務(wù)的格式:http://網(wǎng)關(guān)IP:網(wǎng)關(guān)端口號/serviceId/**

多服務(wù)的負(fù)載均衡

如果Eureka Server上有兩個相同serviceId的服務(wù)時,SpringCloud Gateway會自動完成負(fù)載均衡。

復(fù)制一個user-service服務(wù)實(shí)例,修改服務(wù)端口號,如下所示:

# 服務(wù)名稱
spring:
  application:
    name: user-service
# Eureka Server
eureka:
  client:
    service-url:
      defaultZone: http://localhost:10000/eureka/
# 服務(wù)端口號
server:
  port: 9091

在復(fù)制的項(xiàng)目內(nèi)使用相同的spring.application.name保持serviceId一致,只做端口號的修改,為了區(qū)分GateWay完成了負(fù)載均衡,我們修改/index請求的返回內(nèi)容如下所示:

@GetMapping(value = "/index")
public String index() {
  return "this is user lb index";
}

訪問http://localhost:8080/USER-SERVICE/index,輸出內(nèi)容如下所示:

this is user lb index
this is user index
this is user lb index
this is user index
...
總結(jié)

通過本章的講解,我們已經(jīng)對SpringCloud Gateway的轉(zhuǎn)發(fā)有一個簡單的理解,通過從服務(wù)注冊中心拉取服務(wù)列表后,自動根據(jù)serviceId映射路徑前綴,同名服務(wù)多實(shí)例時會自動實(shí)現(xiàn)負(fù)載均衡。

源碼位置

Gitee:https://gitee.com/hengboy/spr...

ApiBoot:https://gitee.com/hengboy/api...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/74415.html

相關(guān)文章

  • SpringCloud學(xué)習(xí)(4)

    摘要:本篇介紹并集成是一個服務(wù)器,也可以說是進(jìn)入系統(tǒng)的唯一節(jié)點(diǎn)。它還可能有其他功能,如授權(quán)監(jiān)控負(fù)載均衡緩存請求分片和管理靜態(tài)響應(yīng)處理等。負(fù)責(zé)請求轉(zhuǎn)發(fā)合成和協(xié)議轉(zhuǎn)換。它可以在協(xié)議與內(nèi)部使用的非友好型協(xié)議間進(jìn)行轉(zhuǎn)換,如協(xié)議協(xié)議。 ????????本篇介紹并集成ZUUL API getaway:API Gateway是一個服務(wù)器,也可以說是進(jìn)入系統(tǒng)的唯一節(jié)點(diǎn)。這跟面向?qū)ο笤O(shè)計模式中的Facade模...

    Michael_Lin 評論0 收藏0
  • 2021 年最新基于 Spring Cloud 的微服務(wù)架構(gòu)分析

    摘要:是一個相對比較新的微服務(wù)框架,年才推出的版本雖然時間最短但是相比等框架提供的全套的分布式系統(tǒng)解決方案。提供線程池不同的服務(wù)走不同的線程池,實(shí)現(xiàn)了不同服務(wù)調(diào)用的隔離,避免了服務(wù)器雪崩的問題。通過互相注冊的方式來進(jìn)行消息同步和保證高可用。 Spring Cloud 是一個相對比較新的微服務(wù)框架,...

    cikenerd 評論0 收藏0
  • SpringCloud打造微服務(wù)平臺--概覽

    摘要:授權(quán)框架使第三方應(yīng)用程序來獲取對服務(wù)的有限訪問機(jī)會。無論是通過編排資源所有者和服務(wù)之間的交互批準(zhǔn)的資源所有者,或通過允許第三方應(yīng)用程序來獲取自己的訪問權(quán)限。 SpringCloud打造微服務(wù)平臺--概覽 簡述 SpringCloud是什么 Spring Boot和SpringCloud是什么關(guān)系 Spring Boot是Spring的一套快速WEB開發(fā)的腳手架,可建立獨(dú)立的Sprin...

    siberiawolf 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<