從0開始搭建 SpringCloudAlibaba 專案
1、服務註冊中心和配置中心nacos
- 首先去NACOS官網 下載相關jar,這裡使用的是最新版本1.3.2
- 解壓縮後需要配置資料庫 nacos->conf 找到nacos-mysql.sql ,在資料庫建庫nacos並執行該指令碼。
- 修改applicaion.properties檔案,其中將預設連線方式修改為mysql資料庫連線
spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://localhost:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimezone=GMT%2b8db.user=root db.password=root
- 配置完以上內容後就可以啟動nacos服務了,選擇nacos->bin目錄下startup.cmd。雙擊該檔案執行,當然執行不了。 因為1.3.2版本預設的啟動方式叢集模式,需要切換成單機模式才可以執行。
- 開啟cmd切換到nacos的bin資料夾下,輸入命令startup.cmd -m standalone ,出現如下顯示就表示啟動成功了。
- 訪問nacos網頁看看效果,cmd啟動完了會有啟動地址,如上圖紅框地址。預設的賬號密碼為 nacos
以上就是nacos的配置資訊與啟動方式。第一步已經完事了,接下來開始建立demo,開始寫程式碼啦
注意事項:必須先啟動nacos,才能啟動cloud的專案
2、建立SpringCloudAlibaba專案
2.1 建立一個父工程
修改pom檔案
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <modules> <module>cloudalibaba-provider</module> </modules> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>cloudalibaba</artifactId> <version>0.0.1-SNAPSHOT</version> <name>cloudalibaba</name> <description>Demo project forSpring Boot</description> <packaging>pom</packaging> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <dependencyManagement> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.2.1.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> </project>
2.2 建立生產者和消費者專案
- 首先建立生產者專案 cloudablibaba-provider,新建module專案,新建的是沒有包和啟動類,沒有配置檔案,需要手動建立
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
server: port: 8000 spring: application: name: provider-server #服務名稱 cloud: nacos: discovery: server-addr: 127.0.0.1:8848 #nacos的服務註冊中心地址
- 建立一個controller測試一下
完成以上,生產者就完成了,啟動專案看看
注意事項:父工程的pom檔案中必須新增
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
不然啟動專案後,註冊中心是無法發現服務的
- 啟動完成後去nacos服務註冊中心看看,發現provider生產者已經註冊到了nacos,說明生產者已經搭建完成。
訪問地址:http://localhost:8000/index ,如圖所示,生產者已經搭建完成
2.2 建立消費者,步驟和建立生產者一樣,修改一下埠號和服務名稱
- 啟動完成後nacos註冊服務中心可以看到消費者服務已經註冊
訪問地址:http://localhost:8001/index ,如圖所示,生產者已經搭建完成
2.3 整合feign,實現消費者呼叫生產者
- 在消費者pom.xml 新增依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>2.2.5.RELEASE</version> </dependency>
- 新增 @EnableFeignClients 註解
- 建立 ConsumerFeign.java 和 FeignServiceFallBack
- 在controller裡新增方法
- 重啟消費者服務,並訪問介面 http://localhost:8001/getInfo,出現如下結果,表示消費者呼叫生產者成功
- 然後停止生產者服務 cloudablibaba-provider,訪問以上介面,看看什麼效果?
出現以上結果表示降級沒有起作用。並沒有返回自定義的資訊。理論上應該顯示 “生產者cloudalibaba-provider服務被降級停用了”。
為什麼出現這個結果呢,SpringCloudAlibaba 降級必須與熔斷器sentinel一起用才生效。在消費者cloudalibaba-consumer的pom.xml新增以下依賴
<!-- 整合sentinel --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> <exclusions> <!--除去該依賴,controller返回的結果才是json,不去除就xml--> <exclusion> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> </exclusion> </exclusions> </dependency>
- 在yml檔案中新增開啟熔斷的開關
- 重啟消費者服務,訪問介面
2.4 整合閘道器SpringCloudGateWay (不是zuul)
- 建立cloudalibaba-gateway服務,建立的都是module
<!--閘道器--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> <version>2.2.1.RELEASE</version> </dependency> <!--nacos註冊中心--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
- 新建啟動類和配置檔案
- 配置檔案application.yml
server: port: 9000 spring: application: name: gateway-server cloud: nacos: discovery: server-addr: 127.0.0.1:8848 gateway: routes: # 路由陣列[路由 就是指定當請求滿足什麼條件的時候轉到哪個微服務] - id: provider-route # 當前路由的標識, 要求唯一,可以隨便寫 uri: lb://provider-server # lb指的是從nacos中按照名稱獲取微服務,並遵循負載均衡策略 predicates: # 斷言(就是路由轉發要滿足的條件) - Path=/provider/** # 當請求路徑滿足Path指定的規則時,才進行路由轉發 filters: # 過濾器,請求在傳遞過程中可以通過過濾器對其進行一定的修改 - StripPrefix=1 # 轉發之前去掉1層路徑 - id: consumer-route uri: lb://consumer-server predicates: - Path=/consumer/** filters: - StripPrefix=1
啟動閘道器服務,(當然消費者和生產者也要啟動,最重要的nacos一定要最先啟動)
啟動閘道器報錯,這是為什麼呢?因為父工程中引入了 spring-boot-starter-web 依賴,SpringCloudGateway中不能引入此依賴,所以要修改cloudalibaba-gateway服務的pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <!-- <parent> <artifactId>cloudalibaba</artifactId> <groupId>com.example</groupId> <version>0.0.1-SNAPSHOT</version> </parent>--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>cloudalibaba-gateway</artifactId> <dependencies> <!--閘道器--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> <version>2.2.1.RELEASE</version> </dependency> <!--nacos註冊中心--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.2.1.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> </project>
重啟閘道器服務cloudalibaba-gateway,訪問地址:http://localhost:9000/provider/index
訪問消費者:http://localhost:9000/consumer/index
訪問消費者呼叫生產者:http://localhost:9000/consumer/getInfo
以上就是SpringCloudAlibaba基礎構建。有不對的地方希望留言指出,不喜勿噴。 轉載請標明出處
關注下面微信公眾號,回覆SpringCloudAlibaba,即可獲取下載地址。