天天看點

SpringCloud相關知識點前言一、微服務二、簡單使用3、過程中遇到的問題其他雜項

文章目錄

  • 前言
  • 一、微服務
    • 1、基本概念
    • 2、優缺點
      • 優點
      • 缺點
    • 3、SpringCloud的五大元件
  • 二、簡單使用
    • 1、分别建立一個微服務提供者和微服務消費者的父工程
  • 3、過程中遇到的問題
    • 1、Non-resolvable import POM
    • 2.Dependency 'org.springframework.boot:spring-boot-starter-jetty:' not found
    • 3.Unknown character set index for field '255' received from server.
    • 4.Connection refused: connect
    • 5.Cannot execute request on any known server
    • 6.Illegal character in scheme name at index 0:
    • 7. 1054 - Unknown column in 'field list'
    • 8.springcloud注冊不進去
    • 9.依賴錯誤
  • 其他雜項

前言

介紹了springcloud相關知識點,以及簡單的使用

一、微服務

1、基本概念

微服務是一種架構模式或者說是架構風格,将單一應用程式劃分為一組小的服務,每個服務在其獨立的小的程序中,服務之間互相協調,互相配合。微服務化的核心就是将傳統 的一站式應用,根據業務拆分成一個一個的服務,徹底的去耦合,每一個微服務提供單個業務功能的服務,一個服務做一件事,從技術角度看就是一種小而獨立的處理過程,類似程序的概念,能夠自行單獨啟動或銷毀,擁有自己獨立的資料庫。

2、優缺點

優點

1、每個服務夠内聚,足夠小,代碼容易了解,這樣能聚焦一個指定對業務功能或業務需求

2、開發簡單、開發效率提高,一個服務可能就是專一的隻幹一件事

3、微服務是松耦合的,是有功能意義的服務,無論是在開發階段還是在部署階段都是獨立的

4、微服務能夠使用不同的語言進行開發

5、易于和第三方內建,微服務允許容易且靈活的方式內建自動部署,通過持續內建工具,如Jenkins、Hudson、bamboo

6、微服務隻是業務邏輯的代碼,不會和HTML、CSS或其他界面元件混合

7、每個微服務都有自己的存儲能力,可以有自己的資料庫,也可以有統一資料庫

缺點

1、開發人員要處理分布式系統的複雜性

2、多服務運維難度,随着服務的增加,運維的壓力也在增大

3、系統部署依賴

4、服務間通信成本

5、資料一緻性

6、系統內建測試

7、性能監控

3、SpringCloud的五大元件

1、Eureka:服務注冊與發現

2、Ribbon:負載均衡

3、Hystrix:斷路器

4、Zuul:路由網關

5、SpringCloud Config:分布式配置中心

二、簡單使用

1、分别建立一個微服務提供者和微服務消費者的父工程

SpringCloud相關知識點前言一、微服務二、簡單使用3、過程中遇到的問題其他雜項
SpringCloud相關知識點前言一、微服務二、簡單使用3、過程中遇到的問題其他雜項

設定pom,添加"packaging",“properties”,“dependencyManagement”

SpringCloud相關知識點前言一、微服務二、簡單使用3、過程中遇到的問題其他雜項
SpringCloud相關知識點前言一、微服務二、簡單使用3、過程中遇到的問題其他雜項

沒截完

SpringCloud相關知識點前言一、微服務二、簡單使用3、過程中遇到的問題其他雜項

代碼如下:

<?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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.SpringCloudTest</groupId>
    <artifactId>microservice</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <junit.version>4.12</junit.version>
        <log4j.version>1.2.17</log4j.version>
        <lombok.version>1.16.18</lombok.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.0.1.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.0.4</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.0.31</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.3.0</version>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-core</artifactId>
                <version>1.2.3</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>${log4j.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>
           

然後建立公共子子產品

SpringCloud相關知識點前言一、微服務二、簡單使用3、過程中遇到的問題其他雜項
SpringCloud相關知識點前言一、微服務二、簡單使用3、過程中遇到的問題其他雜項

修改公共子子產品pom檔案

SpringCloud相關知識點前言一、微服務二、簡單使用3、過程中遇到的問題其他雜項
<?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>microservice</artifactId>
        <groupId>org.SpringCloudTest</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>microservice-api</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies><!-- 目前Module需要用到的jar包,按自己需求添加,如果父類已經包含了,可以不用寫版本号 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>
    
</project>
           

建立實體類:dept

SpringCloud相關知識點前言一、微服務二、簡單使用3、過程中遇到的問題其他雜項
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.io.Serializable;

@SuppressWarnings("serial")
@NoArgsConstructor
@Data
@Accessors(chain=true)
public class Dept implements Serializable //必須序列化
{
    private Long  deptno;   //主鍵
    private String  dname;   //部門名稱
    private String  db_source;//來自那個資料庫,因為微服務架構可以一個服務對應一個資料庫,同一個資訊被存儲到不同資料庫

    public Dept(String dname)
    {
        super();
        this.dname = dname;
    }
}
           

建立maven子產品:microservice-provider-dept-8001

SpringCloud相關知識點前言一、微服務二、簡單使用3、過程中遇到的問題其他雜項

3、過程中遇到的問題

1、Non-resolvable import POM

問題較長的描述:Non-resolvable import POM: Failure to transfer org.springframework.cloud:spring-cloud-dependencies:pom:Dalston.SR1 from https://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced. Original error: Could not transfer artifact org.springframework.cloud:spring-cloud-dependencies:pom:Dalston.SR1 from/to central (https://repo.maven.apache.org/maven2): Transfer failed for https://repo.maven.apache.org/maven2/org/springframework/cloud/spring-cloud-dependencies/Dalston.SR1/spring-cloud-dependencies-Dalston.SR1.pom

意思:在pom.xml中會出現這麼多資訊,大概意思就是從你提供的位址那裡的倉庫找不到你想要的資源,是以你的依賴我沒辦法添加。

解決方法:修改版本,改成下面這個,但是由于版本不一樣,導緻其他配置可能也不一樣。見:https://www.jianshu.com/p/7571d8cf1ed2

<dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
           

2.Dependency ‘org.springframework.boot:spring-boot-starter-jetty:’ not found

弄了好久,最後更換了maven倉庫,然後更新一下maven依賴就好了。

3.Unknown character set index for field ‘255’ received from server.

原因是mysql-connector-java版本問題,改成高版本,如果你的MySQL是8的話,

version就改成8.0.12就行了

4.Connection refused: connect

端口被占用,要不然就是伺服器沒開啟,重新開啟mysql或者redis或者你的springcloud相關的微服務提供者子產品(你不是springcloud項目就沒有這個)

5.Cannot execute request on any known server

是由于沒找伺服器,有可能是配置檔案寫錯了。

eureka.client.serviceUrl.defaultZone=http://localhost:7001/eureka

6.Illegal character in scheme name at index 0:

非法字元,我的是配置檔案寫錯了

這裡不能有空格

SpringCloud相關知識點前言一、微服務二、簡單使用3、過程中遇到的問題其他雜項

7. 1054 - Unknown column in ‘field list’

我把單引号改成雙引号就成了。

insert into dept(dname,db_source) values("人事部",DATABASE());

SpringCloud相關知識點前言一、微服務二、簡單使用3、過程中遇到的問題其他雜項

8.springcloud注冊不進去

配置檔案中

eureka.client.register-with-eureka=false

這個删了就行了

9.依賴錯誤

有時候導入hystrix相關依賴包的時候會出錯,把這個加上版本号就好了

<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
<version>1.4.7.RELEASE</version>
           

其他雜項

  • SpringBoot可以離開SpringCloud獨立開發項目,但是SpringCloud離不開SpringBoot,兩者屬于依賴的關系

繼續閱讀