文章目錄
- 前言
- 一、微服務
-
- 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、分别建立一個微服務提供者和微服務消費者的父工程
設定pom,添加"packaging",“properties”,“dependencyManagement”
沒截完
代碼如下:
<?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>
然後建立公共子子產品
修改公共子子產品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 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
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
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:
非法字元,我的是配置檔案寫錯了
這裡不能有空格
7. 1054 - Unknown column in ‘field list’
我把單引号改成雙引号就成了。
insert into dept(dname,db_source) values("人事部",DATABASE());
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,兩者屬于依賴的關系