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 是通过基于 HTTP 的 RESTful 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: "*"