SpringCloud

Posted jingjinggood

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud相关的知识,希望对你有一定的参考价值。

SpringCloud ?

 

  1. SpringCloud是基于SpringBoot提供了一套微服务解决方案,包括服务注册与发现,配置中心,全链路空间,服务网关,负载均衡,熔断器等组件。

    技术图片
  2.  

    springcloud能够实现分布式、版本控制配置,服务注册与发现,路由,服务于服务的调用,负载均衡配置,断路器,分布式消息管理。

    技术图片
  3.  

    我们学习springcloud的主要途径是参考springcloud官方文档和springcloud中文文档。

    技术图片
  4.  

    springcloud微服务技术栈实现的技术有哪些?

    服务的注册与发现使用的是Eureka。

    服务消费者是rest+ribbon

    服务消费者是feign

    断路器是hystrix

    断路器监控使用的是hystrix dashboard

    路由网关使用的zuul

    分布式配置使用的是spring cloud config

    消息总线使用的是spring cloud bus

    服务链路追踪是spring cloud sleuth

    技术图片
  5.  

    SpringCloud目前国内的使用情况是怎么样的?

    技术图片
  6.  

    springcloud在阿里云服务容器化之后的架构。

    技术图片
     
     
     
    springcloud特性

    Spring Cloud专注于提供良好的开箱即用经验的典型用例和可扩展性机制覆盖。

    • 分布式/版本化配置

    • 服务注册和发现

    • 路由

    • service - to - service调用

    • 负载均衡

    • 断路器

    • 分布式消息传递

     

    Spring Cloud上下文:应用程序上下文服务

     

    Spring Boot对于如何使用Spring构建应用程序有一个看法:例如它具有常规配置文件的常规位置,以及用于常见管理和监视任务的端点。Spring Cloud建立在此之上,并添加了一些可能系统中所有组件将使用或偶尔需要的功能。

    引导应用程序上下文

    一个Spring Cloud应用程序通过创建一个“引导”上下文来进行操作,这个上下文是主应用程序的父上下文。开箱即用,负责从外部源加载配置属性,还解密本地外部配置文件中的属性。这两个上下文共享一个Environment,这是任何Spring应用程序的外部属性的来源。Bootstrap属性的优先级高,因此默认情况下不能被本地配置覆盖。

    引导上下文使用与主应用程序上下文不同的外部配置约定,因此使用bootstrap.yml application.yml(或.properties)代替引导和主上下文的外部配置。例:

    bootstrap.yml
    spring:
      application:
        name: foo
      cloud:
        config:
          uri: ${SPRING_CONFIG_URI:http://localhost:8888}

    如果您的应用程序需要服务器上的特定于应用程序的配置,那么设置spring.application.name(在bootstrap.ymlapplication.yml)中是个好主意。

    您可以通过设置spring.cloud.bootstrap.enabled=false(例如在系统属性中)来完全禁用引导过程。

     

    SpringCloud入门操作

    2、搭建父项目

    Maven搭建父项目,一般常用的有两种方法。
    1)建立一个空项目
    2)建立一个纯 pom 项目
    由于父项目主要是作为子模块的容器,并不需要太多的功能或配置,所以建议采用第一种模式:建立一个空项目。


     
    技术图片
    新建项目 - 选择空项目

     
    技术图片
    设置项目名称及项目路径

    项目名称 - edu
    项目目录:E:springcloudedu
    点击“Finish”完成空项目创建。

    3、创建pom集合模块

    创建两个pom集合模块,用来管理下级子项目。

    3.1、创建 microsvc

    注意利用主菜单里的 File -> New -> Module 菜单项来创建 1 级子模块


     
    技术图片
    通过主菜单 File -> New -> Module 建立 1 级子模块

     
    技术图片
    使用 SpringInitializr 创建子模块

    注:后面的子模块都是采用 SpringInitializr 来创建。


     
    技术图片
    新建模块 - microsvc

     
    技术图片
    配置模块名及路径

    修改 microsvc 模块里的 pom.xml 文件,增加一行,设定包类型为 pom,也就是只管理子模块的依赖关系,并没有代码部分。
     
    技术图片
    添加包类型:类型为 pom

    3.2、创建 other

    同上步骤,创建 other 模块,假设也是 pom 类型
    具体模块参数如下:


     
    技术图片
    other 子模块配置 1

     
    技术图片
    other 子模块配置 2

     
    技术图片
    other 子模块配置 3

    4、创建微服务模块

    微服务模块建立在 microsvc pom 模块下,所以,需要在 microsvc 子模块上点击右键菜单,进行子模块创建操作。


     
    技术图片
    在 microsvc 子模块下创建 微服务模块

    4.1、创建 user 微服务模块

    4.1.1、新建模块

    新建模块,同样是采用 Spring Initializr 模式,注意,采用 Maven Project 类型,里面会包含 java 代码。


     
    技术图片
    user 子模块参数

    暂时不加入依赖,到时可根据需要增加


     
    技术图片
    先不添加依赖

     
    技术图片
    user模块参数

    修改 user 模块的 pom.xml 文件,将默认生成的 parent 参数替换掉,将默认 parent 参数换成 microsvc 模块的信息。
     
    技术图片
    将 user 模块的 parent 换成 microsvc 模块的信息

    将 user 模块的父模块设置为 microsvc 的主要目的,就是利用 microsvc 来管理 user 及其它后续子模块的依赖关系。
    查看 user 模块和 microsvc模块的 pom 文件,可以看到依赖部分变成黄色的警示色,表示依赖重复了:


     
    技术图片
    重复的依赖

    请将 user 模块的 pox 文件里的 dependencies 部分整个删除,就OK了。说明已经从父项目 microsvc 里继承了依赖关系了。

    4.1.2、修改 user 模块的配置文件

     
    技术图片
    将 user 微服务服务端口设置为:8100

    4.1.3、修改 user 模块源码,支持 http 访问

    在 com.tanbushi.edu.microsvc.user 下新建包 controller,用来存放控制器的代码


     
    技术图片
    新建包

    新建包:controller


     
    技术图片
    新建 controller 包

    在controller 包里创建控制器类:UserController
     
    技术图片
    创建控制器类

     
    技术图片
    指定控制器类名

    在 UserController.java 文件里写入如下代码:

    package com.tanbushi.edu.microsvc.user.controller;
    
    /**
     * Created by Administrator on 2019/5/27.
     */
    @RestController
    public class UserController {
        @RequestMapping(value="/hello")
        public String hello(){
            return "hello from UserController";
        }
    }
    
    

    实际代码效果见下图:


     
    技术图片
    注解错误,缺少依赖

    缺少注解对应的依赖,需要补齐。
    鼠标点击 @RestController 上,会弹出红色警示灯,并点击倒三角号,出现操作提示,点击第一条即可增加依赖


     
    技术图片
    发现并添加依赖,并完成 import

    点击 @RequestMapping 出现下面提示
     
    技术图片
    注解错误, Alt+Enter 自动完 import

    从下图可以看到成功 import


     
    技术图片
    成功 import

    同时,检查 user 模块的 pom 文件,发现成功添加了 web 依赖,见下图
     
    技术图片
    user 模块增加了 web 依赖

    该依赖解决了 user 模块的 web 应用可以正常导入,但后续再新建的微服务模块还是需要导入 web 依赖,会比较麻烦。为了简化,可以将该依赖从 user 模块里删除,添加到 microsvc 的 pom 文件里,以后 microsvc 下的微服务模块就可以直接使用 web组件 了。修改后的 microsvc 的 pom 文件如下:
     
    技术图片
    微服务集合模块 microsvc 里添加 web 依赖,以供后续子模块继承

    4.1.4、运行 user 微服务

     
    技术图片
    运行 user 微服务

    出现下图界面,可以看到 8100 http 端口成功启动监听


     
    技术图片
    user 微服务启动 8100 端口

    4.1.5、浏览器访问测试

    在浏览器里输入:http://127.0.0.1:8100/hello

     
    技术图片
    image.png

    访问成功!

     

    4.2、创建 question 题库微服务模块

    基本方法和 user 模块类似,快速列举如下,不做赘述


     
    技术图片
    新建 question 微服务模块

     
    技术图片
    模块设置

     
    技术图片
    修改 parent

     
    技术图片
    设置题库微服务端口为 8200

     
    技术图片
    QuestionController.java 演示代码

    运行题库模块的启动函数 QuestionApplication 后,进行浏览器测试:


     
    技术图片
    题库微服务测试运行成功

 

以上是关于SpringCloud的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端Eureka 服务信息Eureka 发现管理Eureka 安全配置Eureka-HA(高可用) 机制Eur(代码片段

SpringCloud+Feign环境下文件上传与form-data同时存在的解决办法

SpringCloud环境搭建服务提供者 我们需要拿到实体类,所以要配置api module, 在这时报错

springcloud项目多个微服务中,jwt鉴权的代码应该放在哪个服务中?

微信小程序代码片段

VSCode自定义代码片段——CSS选择器