SpringCloud
SpringCloud ?
-
SpringCloud是基于SpringBoot提供了一套微服务解决方案,包括服务注册与发现,配置中心,全链路空间,服务网关,负载均衡,熔断器等组件。
-
springcloud能够实现分布式、版本控制配置,服务注册与发现,路由,服务于服务的调用,负载均衡配置,断路器,分布式消息管理。
-
我们学习springcloud的主要途径是参考springcloud官方文档和springcloud中文文档。
-
springcloud微服务技术栈实现的技术有哪些?
服务的注册与发现使用的是Eureka。
服务消费者是rest+ribbon
服务消费者是feign
断路器是hystrix
断路器监控使用的是hystrix dashboard
路由网关使用的zuul
分布式配置使用的是spring cloud config
消息总线使用的是spring cloud bus
服务链路追踪是spring cloud sleuth
-
SpringCloud目前国内的使用情况是怎么样的?
-
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.ymlspring: application: name: foo cloud: config: uri: ${SPRING_CONFIG_URI:http://localhost:8888}
如果您的应用程序需要服务器上的特定于应用程序的配置,那么设置
spring.application.name
(在bootstrap.yml
或application.yml
)中是个好主意。您可以通过设置
spring.cloud.bootstrap.enabled=false
(例如在系统属性中)来完全禁用引导过程。SpringCloud入门操作
2、搭建父项目
Maven搭建父项目,一般常用的有两种方法。
1)建立一个空项目
2)建立一个纯 pom 项目
由于父项目主要是作为子模块的容器,并不需要太多的功能或配置,所以建议采用第一种模式:建立一个空项目。
项目名称 - edu
项目目录:E:\springcloud\edu
点击“Finish”完成空项目创建。3、创建pom集合模块
创建两个pom集合模块,用来管理下级子项目。
3.1、创建 microsvc
注意利用主菜单里的 File -> New -> Module 菜单项来创建 1 级子模块
注:后面的子模块都是采用 SpringInitializr 来创建。
修改 microsvc 模块里的 pom.xml 文件,增加一行,设定包类型为 pom,也就是只管理子模块的依赖关系,并没有代码部分。
3.2、创建 other
同上步骤,创建 other 模块,假设也是 pom 类型
具体模块参数如下:
4、创建微服务模块
微服务模块建立在 microsvc pom 模块下,所以,需要在 microsvc 子模块上点击右键菜单,进行子模块创建操作。
4.1、创建 user 微服务模块
4.1.1、新建模块
新建模块,同样是采用 Spring Initializr 模式,注意,采用 Maven Project 类型,里面会包含 java 代码。
暂时不加入依赖,到时可根据需要增加
修改 user 模块的 pom.xml 文件,将默认生成的 parent 参数替换掉,将默认 parent 参数换成 microsvc 模块的信息。
将 user 模块的父模块设置为 microsvc 的主要目的,就是利用 microsvc 来管理 user 及其它后续子模块的依赖关系。
查看 user 模块和 microsvc模块的 pom 文件,可以看到依赖部分变成黄色的警示色,表示依赖重复了:
请将 user 模块的 pox 文件里的 dependencies 部分整个删除,就OK了。说明已经从父项目 microsvc 里继承了依赖关系了。4.1.2、修改 user 模块的配置文件
4.1.3、修改 user 模块源码,支持 http 访问
在 com.tanbushi.edu.microsvc.user 下新建包 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 上,会弹出红色警示灯,并点击倒三角号,出现操作提示,点击第一条即可增加依赖
点击 @RequestMapping 出现下面提示
从下图可以看到成功 import
同时,检查 user 模块的 pom 文件,发现成功添加了 web 依赖,见下图
该依赖解决了 user 模块的 web 应用可以正常导入,但后续再新建的微服务模块还是需要导入 web 依赖,会比较麻烦。为了简化,可以将该依赖从 user 模块里删除,添加到 microsvc 的 pom 文件里,以后 microsvc 下的微服务模块就可以直接使用 web组件 了。修改后的 microsvc 的 pom 文件如下:
4.1.4、运行 user 微服务
出现下图界面,可以看到 8100 http 端口成功启动监听
4.1.5、浏览器访问测试
在浏览器里输入:http://127.0.0.1:8100/hello
访问成功!4.2、创建 question 题库微服务模块
基本方法和 user 模块类似,快速列举如下,不做赘述
运行题库模块的启动函数 QuestionApplication 后,进行浏览器测试:
-