day2 springcloud組件(nacos注冊/配置中心 feign組件請求調用 gateway網關)


springcloud相關配置

官方文檔https://github.com/alibaba/spring-cloud-alibaba

在公共模塊common中的pom.xml中加入

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2.2.0.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
dependencyManagement是作為依賴管理的配置 里面的dependency配置包沒有引入 作用相當於為以后引入的com.alibaba.cloud包定義了版本號




一.nacos服務注冊中心Nacos Discovery
官方https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/readme.md
1)pom.xml引入依賴 
<dependency>
     <groupId>com.alibaba.cloud</groupId>
     <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
 </dependency>

2)nacos安裝及配置
https://github.com/alibaba/nacos/releases/download/1.4.1/nacos-server-1.4.1.zip
https://github.com/alibaba/nacos/releases/download/1.4.1/nacos-server-1.4.1.tar.gz
將startup.cmd中的MODE="cluster"集群模式改為MODE="standalone"單機模式 啟動startup.cmd
默認啟動端口8848
在需要使用注冊中心的模塊中yml加入配置
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
啟動類中加上注解@
EnableDiscoveryClient即注冊到了注冊中心

nacos還有管理平台http://localhost:8848/nacos
默認賬號密碼nacos/nacos
此時服務列表為空 因為需為服務起名才能看見 yml加上
spring.application.name=名稱 就能看到了



二.Fengin遠程調用其它服務組件
1)引入依賴
<dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2)配置過程

啟動類加上去掃描feign包的注解
  @EnableFeignClients(basePackages = "com.hb.gulimail.member.feign")
掃描包中新增個Feign接口 如
@FeignClient("coupon")
public interface FeignTest {
@RequestMapping("/coupon/coupon/list")
public R list();
}
@FeignClient("coupon")是配置需調用的服務名 同時會自動注入bean
@RequestMapping即調用coupon服務中對應的接口



三.nacos配置中心
1)引入nacos配置中心依賴
<dependency>
     <groupId>com.alibaba.cloud</groupId>
     <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
 </dependency>

 2)添加/src/main/resources/bootstrap.properties

spring.application.name=coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
//bootstrap.properties優先級比spplication.properties高
//服務名為coupon對應的在nacos的配置文件是coupon.properties

可以在controller中加上@RefreshScope熱加載

3)配置命名空間/組

nacos中有命名空間菜單選項 對配置文件配置管理中有group組的選項

建議配置命名空間/組最終方案:每個微服務創建自己的命名空間,然后使用配置分組區分環境(dev/test/prod)

  即每個微服務都創建命名空間 每個空間中的配置文件都區分(dev/test/prop)環境

# 可以選擇對應的命名空間 # 寫上對應環境的命名空間ID
spring.cloud.nacos.config.namespace=b176a68a-6800-4648-833b-be10be8bab00
# 更改配置分組
spring.cloud.nacos.config.group=DEFAULT_GROUP

#默認nacos中的配置文件名稱是 服務名.properties 改為yaml后綴方式為

#指定文件類型
spring.cloud.nacos.config.file-extension=yaml

 

 

 

4)多配置集

項目的配置信息可能不會全放同一個配置文件中 nacos也考慮到這種情況

 )bootstrap.properties中配置

//指定nacos中配置文件的位置 組
spring.cloud.nacos.config.extension-configs[0].data-id=datasource.yml
spring.cloud.nacos.config.extension-configs[0].group=dev
spring.cloud.nacos.config.extension-configs[0].refresh=true

spring.cloud.nacos.config.extension-configs[1].data-id=mybatis.yml
spring.cloud.nacos.config.extension-configs[1].group=dev
spring.cloud.nacos.config.extension-configs[1].refresh=true

spring.cloud.nacos.config.extension-configs[2].data-id=other.yml
spring.cloud.nacos.config.extension-configs[2].group=dev
spring.cloud.nacos.config.extension-configs[2].refresh=true

 

 

 

四.Gateway網關

網關是請求流量的入口,常用功能包括路由轉發,權限校驗,限流控制等。springcloud gateway取代了zuul網關。

1)三大核心概念

Route: 發一個請求給網關,網關要將請求路由到指定的服務。路由有id,目的地uri,斷言的集合,匹配了斷言就能到達指定位置
Predicate斷言: 就是java里的斷言函數,匹配請求里的任何信息,包括請求頭等。根據請求頭路由哪個服務
Filter: 過濾器請求和響應都可以被修改。
//白話:斷言就是根據請求中的信息判斷得請求到 可能類似mvc的handlemapping

斷言 過濾器參考

https://cloud.spring.io/spring-cloud-gateway/2.2.x/reference/html/#gateway-request-predicates-factories

https://cloud.spring.io/spring-cloud-gateway/2.2.x/reference/html/#gatewayfilter-factories

2)配置例子

spring:
  cloud:
    gateway:
      routes:
        - id: test_route
          uri: https://www.baidu.com
          predicates:
            - Query=url,baidu

        - id: qq_route
          uri: https://www.qq.com
          predicates:
            - Query=url,qq

        - id: product_route
          uri: lb://gulimall-product
          predicates:
            - Path=/api/product/**
          filters:
            - RewritePath=/api/(?<segment>.*),/$\{segment}

        - id: third_party_route
          uri: lb://gulimall-third-party
          predicates:
            - Path=/api/thirdparty/**
          filters:
            - RewritePath=/api/thirdparty/(?<segment>.*),/$\{segment}

        - id: member_route
          uri: lb://gulimall-member
          predicates:
            - Path=/api/member/**
          filters:
            - RewritePath=/api/(?<segment>.*),/$\{segment}

        - id: ware_route
          uri: lb://gulimall-ware
          predicates:
            - Path=/api/ware/**
          filters:
            - RewritePath=/api/(?<segment>.*),/$\{segment}

        - id: admin_route
          uri: lb://renren-fast
          predicates:
            - Path=/api/**
          filters:
            - RewritePath=/api/(?<segment>.*),/renren-fast/$\{segment}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM