Spring Cloud Alibaba 之 user服務

項目技術選型

項目結構

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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.9.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.laiya</groupId>
    <artifactId>user-center</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>user-center</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <!--Sporing Boot-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--Nacos-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--feign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>io.github.openfeign</groupId>
            <artifactId>feign-httpclient</artifactId>
        </dependency>
        <!-- nacos 動態配置-->
        <!--        <dependency>-->
        <!--            <groupId>com.alibaba.cloud</groupId>-->
        <!--            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>-->
        <!--        </dependency>-->

        <!--Redis-->
<!--        <dependency>-->
<!--            <groupId>org.springframework.boot</groupId>-->
<!--            <artifactId>spring-boot-starter-data-redis-reactive</artifactId>-->
<!--        </dependency>-->

        <!--Mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--Mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.2</version>
        </dependency>

        <!--Lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
        </dependency>
        <!--Test-->
        <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>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-websocket</artifactId>
            <version>5.2.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zipkin</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-sentinel</artifactId>
        </dependency>
    </dependencies>
    <dependencyManagement>

        <dependencies>
            <!--整合Spring Cloud-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.SR3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--整合Spring Cloud Alibaba-->
            <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>


    <!--分別設置開發,測試,生產環境-->
    <profiles>
        <!-- 開發環境 -->
        <profile>
            <id>dev</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <environment>dev</environment>
            </properties>
        </profile>
        <!-- 測試環境 -->
        <profile>
            <id>test</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <properties>
                <environment>test</environment>
            </properties>
        </profile>
        <!-- 生產環境 -->
        <profile>
            <id>pro</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <properties>
                <environment>pro</environment>
            </properties>
        </profile>
    </profiles>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>

                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>8.0.16</version>
                    </dependency>
                </dependencies>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>

        </plugins>
        <!-- 打包後文件名稱:項目名-環境-版本 -->
        <finalName>${project.artifactId}-${environment}-${project.version}</finalName>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <!-- 開啓過濾替換功能-->
                <filtering>true</filtering>
                <includes>
                    <!-- 項目打包完成的包中只包含當前環境文件 -->
                    <include>application.yml</include>
                    <include>application-${environment}.yml</include>
                    <include>bootstrap.yml</include>
                    <include>mybatis/*/*.xml</include>
                    <include>templates/*.html</include>
                    <include>static/</include>
                </includes>
            </resource>
        </resources>
    </build>

</project>

pom 裏配置了多環境打包,openfeign,zipkin,actuator,sentinel,websocket,lombok 等組件下面對這些組件html

  • openfeign 是用來爲微服務架構下服務之間的調用提供瞭解決方案,能夠理解爲被封裝的請求模式。
  • zipkin 是用來作鏈路跟蹤的工具,是一個開放源代碼分佈式的跟蹤系統,每一個服務向zipkin報告計時數據,zipkin會根據調用關係經過Zipkin UI生成依賴關係圖(之後的博客裏會將)
  • actuator 是用來作應用的健康檢查,Spring Boot Actuator能夠幫助你監控和管理Spring Boot應用,好比健康檢查、審計、統計和HTTP追蹤等。全部的這些特性能夠經過JMX或者HTTP endpoints來得到。
  • sentinel 是面向分佈式服務架構的高可用流量防禦組件,主要以流量爲切入點,從限流、流量整形、熔斷降級、系統負載保護、熱點防禦等多個維度來幫助開發者保障微服務的穩定性。
  • websocket 全雙工通信協議,可簡單理解爲服務端能夠主動向客戶端發送請求

實現多環境打包須要配置多個*.yml 配置文件,配置文件java

  • application.yml 內容
spring:
  profiles:
    active: "@environment@"

application-dev內容mysql

#======================================#
#========== Server settings ==========#
#======================================#
server:
  port: 8086
  #  servlet:
  #    context-path: /user-center
  tomcat:
    uri-encoding: UTF-8





spring:
  #server name
  application:
    name: user-center
  #======================================#
  #========== Database settings ==========#
  #======================================#
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: 
    password: xxxxx
    url: jxxxxx


    #======================================#
    #========== Nacos ==========#
    #======================================#
  cloud:
    nacos:
      discovery:
        # nacos server address
        server-addr: xxxx

  thymeleaf:
    prefix: classpath:/templates/
    check-template-location: true
    suffix: .html
    encoding: utf-8
    servlet:
      content-type: text/html
    mode: HTML5
    cache: false
  #======================================#
  #========== zipkin ==========#
  #======================================#
  zipkin:
    base-url:xxx
    discovery-client-enabled: false
  sleuth:
    sampler:
      #      抽樣率 10%
      probability: 1.0


#======================================#
#========== MyBatis settings ==========#
#======================================#

mybatis:
  mapper-locations: classpath:templates/*/*.xml

  #======================================#
  #========== Redis settings ==========#
  #======================================#
#  redis:
#    enabled: true
#    host: xxx
#    port: 6379
#    ssl: false
#    database: 0
#    password: x'x'x'x
#    jedis:
#      pool:
#        # 最大空閒鏈接數
#        maxIdle: 3
#        # 最大活動鏈接數
#        maxActive: 20


feign:
  client:
    config:
      #      想要配置的微服務 名稱    全局配置 default
      user-center:
        loggerLevel: full
  #        httpclient  鏈接池
  httpclient:
    enabled: true
    #    feign 的最大鏈接數
    max-connections: 200
    #    feign 的單個路徑最大鏈接數
    max-connections-per-route: 50



#======================================#
#========== Config sttings ==========#
#======================================#



#
body:
  controllerMethodList:
    swaggerResources,
    getDocumentation
management:
  endpoints:
    web:
      exposure:
        include: '*'

mysql 配置信息說明react

datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: 
    password: xxxxx
    url: jxxxxx

mysql 版本>= 6.x 須要用 com.mysql.cj.jdbc.Driver
mysql 版本<= 5.x 須要用 com.mysql.jdbc.Driver
** com.mysql.jdbc.Driver 源碼 以下**git

public class Driver extends com.mysql.cj.jdbc.Driver {
    public Driver() throws SQLException {
        super();
    }

    static {
        System.err.println("Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. "
                + "The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.");
    }
}

經過源碼咱們能夠看到 Driver 繼承了 com.mysql.cj.jdbc.Driver,若是不加 cj 項目也能夠運行可是會打印出一句警告的話,大概意思是說驅動版本須要升級
因此在出現這句話的時候你們不要謊。
github

另外須要注意的是在爲應用起名字的時候儘可能不要用_ 和特殊字符,能夠用-,不然在啓動的時候會打印出警告web

針對微服務,咱們在新增微服務組件的時候儘可能遵循三個步驟
1 pom 文件引入依賴
2 yml 寫配置
3 項目加註解redis

用戶微服務引入Nacos 步驟spring

  • 引入依賴
<!--Nacos-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
  • yml寫配置
#=========================#
    #========== Nacos =========#
    #=========================#
spring:
  cloud:
    nacos:
      discovery:
        server-addr: (nacos 請求地址,格式爲 ip[域名]:port; 例如 xxx.com:8848,注意 地址前面不要加http 後者https) 
        # namespace: (Nacos 命名空間的uuid  不是名稱)
        # cluster-name: xxx
  • 項目加註解(沒有註解,不須要)
    ** 啓動當前項目後,成功後會先發現Nacos 控制檯服務管理裏會有一個user-center 的服務**

    至此 微服務註冊到Nacos 便成功了,咱們發現服務註冊很簡單,只須要簡單的兩步,加依賴,寫配置
    針對不一樣環境打包的命令爲 mvn install -Ppro/-Pdev/-Ptest,須要哪一個環境就打哪一個環境的包

下一節會爲你們講解服務和服務之間的調用,但願可以幫助你們搭建一個簡單的微服務系統。sql

相關文章
相關標籤/搜索