文章目录
- 前言
- 一、微服务
- 二、简单使用
- 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,两者属于依赖的关系