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}