1. 程式人生 > 其它 >從0開始搭建 SpringCloudAlibaba 專案

從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%2b8
db.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 for
Spring 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裡新增方法
  • 然後停止生產者服務 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,即可獲取下載地址。