Spring-Cloud-Alibaba-Nacos 注冊中心
下載、安裝 Nacos
下載地址:https://github.com/alibaba/nacos/releases
下載后解壓,打開 bin 目錄,雙擊 startup.cmd 即可運行,出現錯誤可參考:https://www.cnblogs.com/songjilong/p/12620021.html
引入 spring-cloud-alibaba、alibaba-nacos-discovery
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
配置服務名、注冊中心地址
spring:
application:
name: gulimall-coupon # 服務名稱
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 # nacos地址
4、運行需要注冊的服務、打開瀏覽器輸入http://127.0.0.1:8848/nacos ,用戶名密碼默認是 nacos,進入后點擊服務列表就可以看到所有注冊的服務了
Spring-Cloud-OpenFeign 遠程調用
引入 openfeign 依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
編寫遠程調用接口
告訴 SpringCloud 這個接口需要調用的遠程服務,接口方法的請求地址、名稱、返回值要與被調用的方法一致
//指定調用的遠程服務名
@FeignClient("gulimall-coupon")
public interface CouponFeignService {
@RequestMapping("/coupon/coupon/member/list")
public R memberCoupons();
}
開啟遠程調用服務
@SpringBootApplication
@EnableDiscoveryClient
//指定自己創建的遠程接口的位置
@EnableFeignClients(basePackages = "com.sjl.gulimall.member.feign")
public class GulimallMemberApplication {
public static void main(String[] args) {
SpringApplication.run(GulimallMemberApplication.class, args);
}
}
Spring-Cloud-Alibaba-Nacos 配置中心
引入alibaba-nacos-config
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
添加配置文件bootstrap.properties
# 服務名
spring.application.name=gulimall-coupon
# nacos地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
開啟動態刷新
完成上述兩步后,應用會從 Nacos Config 中獲取相應的配置,並添加在 Spring Environment 的 PropertySources 中。要想打開動態刷新,還需要在當前類加上 @RefreshScope
注解
@RefreshScope //開啟動態刷新
@RestController
@RequestMapping("coupon/coupon")
public class CouponController {
@Value("${coupon.user.name}")
private String name; //coupon.user.name=張三
@Value("${coupon.user.age}")
private Integer age; //coupon.user.age=18
@RequestMapping("/test")
public R test(){
return R.ok().put("name", name).put("age", age);
}
}
在Nacos新建配置文件
進入 Nacos 控制台,新建一個配置文件,命名為服務名.properties
動態的修改配置文件
當我們將配置文件的值修改后,訪問的數據也會 更新,如果配置中心和當前應用都配置了相同的項,優先使用配置中心的配置
Nacos 配置中心的一些概念與細節
命名空間
用於進行租戶粒度的配置隔離。不同的命名空間下,可以存在相同的 Group 或 DataID 的配置。Namespace 的常用場景之一是不同環境的配置的區分隔離,例如開發測試環境和生產環境的資源(如配置、服務)隔離等。
Nacos 中默認有一個 public 保留空間,默認所有新增的配置都放在這個空間中
我們可以在 Nacos 可視化界面創建自己的命名空間
新建一個配置文件,並發布,命名規則為服務名.properties
在 bootstrap.properties
文件中指定命名空間的唯一標識,重啟該服務,即可訪問
spring.cloud.nacos.config.namespace=5a8f07f8-9fc0-480e-9d31-1a1800b7530b
配置集
一組相關或者不相關的配置項的集合稱為配置集。在系統中,一個配置文件通常就是一個配
置集,包含了系統各個方面的配置。例如,一個配置集可能包含了數據源、線程池、日志級
別等配置項。
配置集ID
Nacos中的某個配置集的 ID。 配置集ID是組織划分配置的維度之一。DataID 通常用於組織划分系統的配置集。一個系統或者應用可以包含多個配置集,每個配置集都可以被一個有意義的名稱標識。DataID 通常采用類Java 包(如com.taobao.tc.refund.log.level) 的命名規則保證全局唯一性。 此命名規則非強制。
類似配置文件名
配置分組
Nacos 中的一組配置集,是組織配置的維度之一。通過一個有意義的字符串(如 Buy 或 Trade )對配置集進行分組,從而區分DataID 相同的配置集。當您在 Nacos 上創建一個配置時,如果未填寫配置分組的名稱,則配置分組的名稱默認采用DEFAULT_ GROUP。
在 Nacos 中新建一個分組后,需要在 bootstrap.properties
中指定自己要使用的分組
spring.cloud.nacos.config.group=dev
通常將每個微服務創建自己的命名空間,使用dev、prod、test等名稱作為配置分組,區分環境
同時加載多個配置集
有了 Nacos 配置中心,我們就可以將所有的配置文件都放在配置中心里管理,項目里只保留一個bootstrap.properties
,非常便於管理
比如,現在將我們原本的配置文件 application.yml
拆分為幾個部分放到配置中心
-
數據源配置:datasource.yml
spring: datasource: url: jdbc:mysql://192.168.56.10:3306/gulimall_sms driver-class-name: com.mysql.cj.jdbc.Driver username: root password: root
-
mybatis 配置:mybatis.yml
mybatis-plus: mapper-locations: classpath:/mapper/**/*.xml global-config: db-config: id-type: auto
-
其他配置:other.yml
server: port: 7000 spring: application: name: gulimall-coupon datasource: url: jdbc:mysql://192.168.56.10:3306/gulimall_sms driver-class-name: com.mysql.cj.jdbc.Driver username: root password: root cloud: nacos: discovery: server-addr: 127.0.0.1:8848
我們還需要在 bootstrap.properties
中配置如下信息
-
data-id:配置文件名
-
group:分組名
-
refresh:自動刷新(默認是false),即 修改了配置中心的值后是否刷新
spring.cloud.nacos.config.ext-config[0].data-id=datasource.yml
spring.cloud.nacos.config.ext-config[0].group=dev
spring.cloud.nacos.config.ext-config[0].refresh=true
spring.cloud.nacos.config.ext-config[1].data-id=mybatis.yml
spring.cloud.nacos.config.ext-config[1].group=dev
spring.cloud.nacos.config.ext-config[1].refresh=true
spring.cloud.nacos.config.ext-config[2].data-id=other.yml
spring.cloud.nacos.config.ext-config[2].group=dev
spring.cloud.nacos.config.ext-config[2].refresh=true
點進源碼可發現此配置是個 List 集合,因此可以配置多個
配置完成后,可以訪問相關接口測試一下
更多配置請參考 Nacos 官方文檔:https://nacos.io/zh-cn/docs/what-is-nacos.html
Spring-Cloud-Gatway API網關
簡介
網關作為流量的入口,常用功能包括路由轉發、權限校驗、限流控制等。而 springcloud gateway 作為 SpringCloud 官方推出的第二代網關框架,取代了 Zuul 網關。
使用
開啟服務注冊發現、配置 Nacos 注冊中心、配置中心地址、端口
server:
port: 88
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
spring.application.name=gulimall-coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=24b9f0bf-ac39-431e-80f0-4daa0b923b7a
配置路由,使我們輸入localhost:88?query=baidu
可以跳轉到百度官網,輸入localhost:88?query=qq
可以跳轉到qq官網
spring:
cloud:
gateway:
routes:
- id: test_baidu
uri: https://www.baidu.com
predicates:
- Query=query,baidu
- id: test_qq
uri: https://www.qq.com
predicates:
- Query=query,qq
官方文檔:https://cloud.spring.io/spring-cloud-gateway/2.1.x/single/spring-cloud-gateway.html