SpringCloud 学习

1.什么是微服务架构

  微服务架构是一种架构模式或者架构风格,它提倡将单一应用程序分成一组小的服务,每个服务运行在其独立的自己的进程中,服务之间互相协调,配合,为用户提供最终价值。

2.什么是SpringCloud

  SpringCloud 就是分布式微服务架构下的一站式解决方案,是各个微服务架构落地技术的集合体,俗称为服务全家桶

3.SpringCloud 和 SpringBoot 是什么关系

  1. SpringBoot:专注于快速方便的开发单个个体微服务

    SpringCloud:是关注全局的微服务协调整理治理框架,它将 SpringBoot 开发的一个个单体微服务整合并管理起来,为各个微服务之间提供,管理配置、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等集成服务

  2. SpringBoot 可以离开 SpringCloud 独立使用开发项目,但是 SpringCloud 离不开 SpringBoot,属于依赖关系。

总的来说,SpringBoot 专注于快速、方便的开发单个微服务个体,SpringCloud 关注全局的服务治理框架

4.SpringCloud 和 Dubbo 有什么区别?

  1. 在通讯机制方面:

    Dubbo 是通过 RPC 远程过程调用

    SpringCloud 是通过基于 HTTPRESTful api

  2. 在自身技术方面:

    Dubbo 就是像组装机,使用的基本都是第三方。选择的自由度很高,但是出问题的可能性也会随之提高。

    SpringCloud 就像是买的一体机,一整套都是自己的。在 Spring Source 的整合下,做了大量的稳定性测试,使其拥有更高的稳定性。

    具体见表:

    Dubbo Spring Cloud
    服务注册中心 Zookeeper Spring Cloud Netflix Eureka
    服务调用方式 RPC REST API
    服务监控 Duboo-monitor Spring Boot Admin
    断路器 不完善 Spring Cloud Netflix Hystrix
    服务网关 Spring Cloud Netflix Zuul
    分布式配置 Spring Cloud Config
    服务跟踪 Spring Cloud Sleuth
    消息总线 Spring Cloud Bus
    数据流 Spring Cloud Stream
    批量任务 Spring Cloud Task
    …… …… ……

开发参考文档地址:

  中文版API:https://www.springcloud.cc/spring-cloud-dalston.html

  springcloud中国社区:http://springcloud.cn/

  springcloud中文网:https://www.springcloud.cc/

至此,理论概念部分完成,接下来就是代码案例的编写了。

5.代码案例

1)Rest微服务案例-父工程构建

首先,在working set 中新建一个maven porject。

Artifact Id:父工程的名字

Packaging:pom

图片加载失败

2)pom文件编写

1

*框架搭建过程中发生的问题与解决方式

1) 启动报错

  1. java.lang.ClassNotFoundException: org.springframework.boot.bind.RelaxedPropertyResolver

      关于这个报错信息我也百度了好久,说什么的都有,基本说的都是依赖版本问题,我也是一顿调整问题,后来将光标移动到了启动类的 @SpringBootApplication 注解上发现 spring-boot-autoconfigure 的版本为 1.5.X。因为我的父级 pom 中定义了 springboot starter 的版本为 2.4.5 所以意识到不对了。后来手动引入 spring-boot-autoconfigure 解决这个问题

    1
    2
    3
    4
    5
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-autoconfigure</artifactId>
    <version>${springboot.stater.version}</version>
    </dependency>

2)扫描不到mapper接口

  1. org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

    这个报错产生的原因很多,列出我知道的几种

    • mybatisPlusConfig 配置文件类上是否加入了 @MapperScan(”mapper路径“) 注解
    • yml.xml 配置文件中 的 mapper.xml 文件扫描路径配置是否正确
    • mapper.xml 文件存放路径是否正确,spring boot 默认是不会将 java 文件夹下的非java文件打包。所以如果mapper.xml文件应该放在 resource 静态资源路径下,如果放在 java文件夹下,则需要在 pom 中配置 resources 将xml打包
    • idea 开发工具项目文件路径问题,idea是会隐藏空文件夹的,例如有的时候我们在resource 下创建了 mybatis.mapper 用来存放 mapper.xml 文件。这个时候的 mybatis.mapper 文件夹在 idea 中你可能认为他是两个文件夹,但是如果你在系统中找到这个文件夹,这个文件夹可能并不是在 mybatis 文件中还有一个 mapper 文件夹,而是有一个叫 mybatis.mapper 的文件夹。这个真的要注意。

    *我这里就是犯了最后一个错误,我怎么也没想到 idea 的这个问题,他创建多级空目录会有这个问题,我知道,但是就没有往这边想,为此我付出了 5 个小时的代价。特此记录,引以为戒

3)swagger 3.0版本注意事项

  1. 本来小编用的是 swagger2 的版本,结果因为搭建项目框架,有的依赖有问题,切换了 swagger 的版本为:3.0.0.。切换之后服务可以正常启动,但是访问不了 swagger 的页面了。*(访问地址:swagger-ui.html)*

    解决:

    1. swagger3.0 需要在 pom 中添加以下依赖:

      1
      2
      3
      4
      5
      <dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-boot-starter</artifactId>
      <version>3.0.0</version>
      </dependency>
    2. 需要在启动类增加 @EnableOpenApi 注解

    3. 访问地址变为:xxx/swagger-ui/index.html

4)Erueka 报错

  1. 启动报错:spring cloud erueka com.google.gson.GsonBuilder:

    升级 gson 的版本即可

  2. 访问eureka 中服务的info–》/actuator/info 404 问题

    • 修改父工程pom

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      <build>
      <finalName>springCloud</finalName>
      <resources>
      <resource>
      <directory>src/main/resources</directory>
      <filtering>true</filtering>
      </resource>
      </resources>
      <plugins>
      <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-resources-plugin</artifactId>
      <version>${maven.resources.version}</version>
      <configuration>
      <delimiters>
      <!--这里使用与匹配yml中的配置,需要注意有的版本这里用的是<delimit>标签-->
      <delimiter>$</delimiter>
      </delimiters>
      </configuration>
      </plugin>
      </plugins>
      </build>
    • 修改子工程yml配置文件

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      eureka:
      # 客户端注册进eureka服务列表内
      client:
      service-url:
      # 对应eureka服务端的defaultZone
      defaultZone: http://localhost:7001/eureka
      # 实例配置
      instance:
      # 实例id,eureka 中实例名称,status显示的名称
      instance-id: ProViderDept8001
      # 配置访问路径可以显示ip地址
      prefer-ip-address: true
      info:
      app.name: springCloud
      company.name: www.sy.com
      build.artifactId: $project.artifactId$
      build.version: $project.version$

      #此处配置用于开发eureka 的actuator/info 信息使用
      management:
      endpoints:
      web:
      exposure:
      # 开放所有
      include: "*"