天天看点

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,两者属于依赖的关系

继续阅读