这将是SpringBoot学习系列的最后一篇文章,主要涉及Spring Cloud和JHispter两个知识点,都具有一定综合性,需要多加实践加强理解。

Spring Cloud

微服务Microservice是今年最火的观念,它的含义是使用定义好边界的小的独立组件来做好一件事情,微服务是相对与传统单块式架构而言的。传统系统易于部署,但可伸缩性差,违反单一功能原则。Spring Cloud提供了分布式开发的完整解决方案,其基于Spring boot,提供了配置管理、服务发现、断路器、代理服务等常见功能。此外,Cloud开发的应用特别适合在Docker或Paas平台,被称为原生云应用。
配置服务:提供了Config Server,它在分布式系统中起到外部配置的功能,通过配置服务,可以集中存储所有应用的配置文件。(QConfig,Apollo)
服务发现:通过Netflix OSS的Eureka来实现服务发现,Eureka Server为微服务注册中心。(SOA服务治理中心,自动发现,Zookeeper)
路由网关:为了让所有微服务对外只有一个接口,不同请求被网关代理到不同服务。通过Zuul实现,支持自动路由映射到Eureka Server上注册的服务,提供@EnableZuulProxy启动路由代理。
负载均衡:提供Ribbon和Feign作为客户端负载均衡,比如使用Ribbon直接注入一个RestTemplate对象,此RestTemplate已经做好负载均衡的工作;使用Feign只需要定义一个注解,有@FeignClient注解的接口,然后使用@RequestMapping注解在方法上映射远程的REST服务,此方法也已做好负载均衡。
断路器(Circuit Breaker):解决当某个方法调用失败的时候,调用后备方法来替代失败的方法,来达到容错,阻止级联错误的功能(关键服务的服务降级,避免服务不可用)。此外,框架提供一个控制台来监控断路器的运行情况,通过@EnableHystrixDashboard注解开启。(问题,能否提供类似CAT的监控功能,可以查看接口调用的频次,响应时的时间等)
Tip:
GitDemo: https://github.com/wanliwang/bluesky
在构建项目时,比较复杂的就是web部分,会用到ribbon,feign,zuul,circuitbreaker等,通过会使用webjar加载脚本框架。

基于Docker的部署
Dockerfile编写,以config模块为例

  1. runboot.sh脚本编写,位于src/main/docker,根据启动顺序,调整sleep时间
  2. Dockerfile编写,位于src/main/docker
  3. 配置Docker的maven插件,请见config子模块
  4. 编译镜像,默认编译到localhost,可以在windows环境变量中配置DOCKER_HOST,并执行mvn clean package docker:build -DskipTests

Tip:
此外还可以使用DockerCompose来定义和运行多容器应用,其使用一个docker-compose.yml来描述多容器的定义,使用docker-compose up -d运行整个应用。

JHipster

JHipster是一个代码生成器(基于nodejs+yeoman),可以生成基于Spring Boot和AngularJS的项目,通常来说,需要按照如下步骤进行安装。安装后,可以发现代码结构和配置比较复杂,一定要用心慢慢分析。

  1. 安装nodejs
  2. 安装Git
  3. 安装Yeoman generator: npm install –g yo (可能需要先升级npm,npm –g install npm)
  4. 安装JHipster: npm install –g generator-jhipster
  5. 安装bower: npm install –g bower, js下载工具
  6. 安装grunt或gulp: npm install –g grunt-cli, js打包工具
  7. 生成项目,选择dir,yo jhipster
  8. 运行,mvn spring-boot :run,然后访问8080即可,admin:admin

Tip:
前端常见的js构建工具包括grunt, gulp和webpack。当前前端代码越来复杂,维护、打包和发布越来越繁琐,这些工具就是针对这些痛点而生的。
grunt: http://www.gruntjs.net/, http://www.gruntjs.net/getting-started
gulpjs: http://www.gulpjs.com.cn/
webpack: http://webpackdoc.com/
bower的基本使用:bower install jquery underscore,下载到当前
详情参考博文:http://www.jianshu.com/p/621dfb94c3b6
npm安装程序时的默认位置: npm config set prefix E:\nodejs\node_modules\npm
npm安装程序时的缓存位置: npm config set cache xxx
此外,该项目还依赖git和yarn,yarn是hadoop资源管理器。

参考资料

  1. 李智慧. 大型网站技术架构[M]. 北京:电子工业出版社, 2013.

SpringBoot详细研究-05微服务与拾遗的更多相关文章

  1. Springboot揭秘-快速构建微服务体系-王福强-2016年5月第一次印刷

    JavaConfig项目: spring IOC有一个非常核心的概念——Bean.由Spring容器来负责对Bean的实例化,装配和管理.XML是用来描述Bean最为流行的配置方式.Spring可以从 ...

  2. Spring-Boot:Spring Cloud构建微服务架构

    概述: 从上一篇博客<Spring-boot:5分钟整合Dubbo构建分布式服务> 过度到Spring Cloud,我们将开始学习如何使用Spring Cloud 来搭建微服务.继续采用上 ...

  3. SpringBoot详细研究-01基础

    Springboot可以说是当前最火的java框架了,非常适合于"微服务"思路的开发,大幅缩短软件开发周期. 概念 过去Spring充满了配置bean的xml文件,随着spring ...

  4. IDEA使用SpringBoot 、maven创建微服务的简单过程

    使用IDEA新建一个简单的微服务 1. 打开IDEA,File -> New  -> project 打开如下图1-1所示的对话框 图 1-1 2.点击"Next"按钮 ...

  5. 使用SpringBoot Admin监控SpringCloud微服务

    spring-boot admin的github地址:https://github.com/codecentric/spring-boot-admin 本文基于SpringCloud的环境和配置上增加 ...

  6. SpringBoot详细研究-04部署测试与监控

    这部分的内容实际就是devops的主要工作内容,当然一名合格的程序要也需要掌握这部分的知识. 热部署 简单来说,在开发时,修改了任何的代码,IDE将自动编译运行及发布:在发布时,当前发布不影响线上服务 ...

  7. SpringBoot详细研究-03系统集成

    据说杰克船长被黑客盗片了,看来信息安全依然任重而道远,本文以此为引子,来介绍下spring boot对于系统集成方面的支持. Spring Security提供一套安全框架,通过IOC和AOP来实现安 ...

  8. SpringBoot详细研究-02数据访问

    Springboot对数据访问部分提供了非常强大的集成,支持mysql,oracle等传统数据库的同时,也支持Redis,MongoDB等非关系型数据库,极大的简化了DAO的代码,尤其是Spring ...

  9. SpringBoot整合Eureka搭建微服务

    1.创建一个services项目,添加三个子模块client(客户端).service(服务端).registry(注册中心) 1.1 创建一个services项目 1.2 添加pom.xml依赖 & ...

随机推荐

  1. C/C++如何整行读入字符串?

    在写代码的过程中,经常要一行一行的读入字符串进行处理,这里我总结了一些方法,供大家参考. 方法一:scanf()读入char[] 使用方法: ]; scanf("%[^\n]",& ...

  2. bzoj千题计划193:bzoj2460: [BeiJing2011]元素

    http://www.lydsy.com/JudgeOnline/problem.php?id=2460 按魔力值从小到大排序构造线性基 #include<cstdio> #include ...

  3. [转载]详解主流浏览器多进程架构:Chrome、IE

    http://www.cnbeta.com/articles/109595.htm 随着Web浏览器重要性的日益突出,恶意软件.木马.间谍软件等网络攻击也呈现逐渐的上升.而面对 如此众多的潜在威胁,为 ...

  4. 关于z-index这个层级的问题

    z-index它可真是一个神奇的东西,它可以随意安排你的层的叠加问题. 如你想让红色矩形压在蓝色矩形上,正常布局先建立一个红色的再建议一个蓝色的,就可以了. 但如果我相反来建立,那么就得借助z-ind ...

  5. 日期控件-my97DatePicker用法

    网上资料,用法,只能选最近30天等等:http://jingyan.baidu.com/article/e6c8503c7244bae54f1a18c7.html

  6. 跳过复制错误——slave_skip_errors、slave_exec_mode

    这一篇写写复制错误处理相关的另两个参数slave_skip_errors.slave_exec_mode,基本环境参考<复制错误处理——sql_slave_skip_counter> 一. ...

  7. 永不改变的PCB设计黄金法则

    尽管目前半导体集成度越来越高,许多应用也都有随时可用的片上系统,同时许多功能强大且开箱即用的开发板也越来越可轻松获取,但许多使用案例中电子产品的应用仍然需要使用定制PCB.在一次性开发当中,即使一个普 ...

  8. Shell中各种判断语法

    Shell判断 按照文件类型进行判断 -b 判断文件是否存在,并且是否为快设备文件(是块设备文件为真) -c 判断文件是否存在,并且是否为字符设备文件(是字符设备文件为真) -d 判断文件是否存在,并 ...

  9. Oracle错误及解决方案

    1.ORA-00257:归档程序错误.在释放之前仅限于内部链接 问题原因:归档日志占满了空间 解决方法: .增加归档日志空间 alter system set db_recovery_file_des ...

  10. Linux 定时器应用【转】

    Linux 定时器应用 实验目的 阅读 Linux 相关源代码,学习 Linux 系统中的时钟和定时器原理,即,ITIMER_REAL实时计数,ITIMER_VIRTUAL 统计进程在用户模式执行的时 ...