(本教程的原地址发布在本人的简书上:http://www.jianshu.com/p/947d57d042e7,若各位看官有什么问题或不同看法请在这里或简书留言,谢谢!)

本人也是前段时间才开始接触Spring Boot、Spring Cloud,进而通过Spring Cloud才知道“微服务”这一概念。之后单位的一个项目使用了Spring Cloud来实现,现在想把如何使用Spring Cloud搭建一个简单的微服务框架写下来,方便以后查阅,同时本人也希望本教程能起到抛砖引玉的作用,欢迎各位大神一起讨论学习。

本入门教程会介绍微服务架构,然后使用Spring Boot、Spring Cloud框架搭建基于微服务架构的应用,这些应用能部署到公司的私有云或者诸如Amazon、Google等公有云。

什么是微服务

在微服务概念出现前,web应用程序大都采用一体化应用架构,即将所有功能模块都集中在一起,包括UI、业务逻辑、数据库操作逻辑等,然后打包成一个庞大的可部署的软件构件,如war包,最后部署到应用服务器上。这种架构有很多弊端。当有新的需求,应用程序就必须做出修改,然后测试、部署;当应用越来越庞大,维护成本越来越高,维护也越来越困难,最后只能重构整个应用,重构后,又是一个恶性循环。

“微服务”这个概念是2014年才逐渐进入开发者的视野。可以用一句话来概括微服务:微服务应用是由多个分布式的、松耦合的小应用聚合在一起,而这些小应用只实现了少量的定义明确的功能。换句话说,就是:搭建一个大型应用时,使用微服务架构能将这个应用分解成多个易于管理的、功能明确的小应用。这些小应用实现的功能都是从大应用中的特定功能抽取出来的,所以它们是完全独立的,不依赖于其它小应用,能够独立运行。而这些小应用之间的“交流”都是通过接口调用(同步)、消息队列(异步)等完成的。所以虽然大应用被拆分成小应用,但它们还是可以很好的协调合作,实现各种功能。

微服务架构有如下特征:

  • 应用程序的逻辑被分解成多个功能明确的、具有明确责任边界的细粒度组件——微服务。
  • 每个微服务都拥有自己独立的业务domain(可以理解为实体类);完全独立,不依赖于其它任何组件;能够被多个应用程序重用。
  • 微服务之间的交流基于一些基本规则。服务提供者和服务消费者之间的数据交换采用轻量级通信协议,如:HTTP和JSON。
  • 微服务底层的实现具有编程语言、平台无关性。因为微服务间的交流是基于“技术无关性协议”(technology-neutral protocol),最常见的是JSON。这意味着微服务应用可以使用多种语言、技术进行搭建。

为什么使用Spring Cloud搭建微服务应用

一体化应用架构有很多弊端,Spring开发团队发现有很多开发团队逐渐摒弃这种架构,转而向分布式应用方向研究。为应付这种转变,Spring开发团队启动了两个项目:Spring Boot和Spring Cloud。

Spring Boot是一个重新构想的Spring框架。Spring Boot基于Spring,但去掉了很多企业级的特性,并提供了一个基于Java、面向REST风格的微服务框架。使用一些简单的注解,就能搭建一个RESTful微服务应用,然后打包并部署,而且不需要应用程序容器(微服务中内置一个tomcat容器)。

微服务架构已成为目前搭建基于云的应用程序最流行的架构。为方便我们开发基于云的微服务应用,Spring开发社区启动了Spring Cloud项目。Spring Cloud框架使操作和发布微服务应用到私有或公有云变得更简便。Spring Cloud包装了多个主流的云管理方面的微服务框架,开发团队通过简单的注解就能将这些优秀的微服务框架整合到我们自己应用中来。这些微服务框架包括:Netflix Eureka(服务注册与发现)、Netflix Ribbon(客户端负载均衡)、Netflix Hysteria(熔断器)、Netflix Zuul(服务网关)、Spring Cloud Config(分布式配置)等。

以下为本教程的目录

  1. 第一个微服务应用
  2. 服务注册与发现——Netflix Eureka
  3. 分布式配置——Spring Cloud Configuration
  4. 未完待续...

教程的源码

https://gitee.com/rain7564/spring_microservices_study

注:

  1. 学习本教程需要一定的Spring Boot基础,若读者未接触或不熟悉,请下载根目录的“Spring Boot实战 ,丁雪丰 (译者).pdf”,然后自行学习。Spring Boot学深一点,搭建基于Spring Cloud的微服务云应用时不会太吃力。
  2. 本教程使用的IDE是idea,建议大家学习的时候也使用。
  3. 若使用idea,建议先配置好maven、git等。

基于Spring Cloud的微服务入门教程的更多相关文章

  1. 基于 Spring Cloud 的微服务架构实践指南(下)

    show me the code and talk to me,做的出来更要说的明白 本文源码,请点击learnSpringCloud 我是布尔bl,你的支持是我分享的动力! 一.引入 上回 基于 S ...

  2. 干货|基于 Spring Cloud 的微服务落地

    转自 微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务.但如果要将微服务架构运用到生产项目上,并且能够发挥该架构模式的重要作用,则需要微服务框架的支持. 在Java生态圈,目前使用较多的 ...

  3. 基于Spring Cloud的微服务落地

    微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务.但如果要将微服务架构运用到生产项目上,并且能够发挥该架构模式的重要作用,则需要微服务框架的支持. 在Java生态圈,目前使用较多的微服务 ...

  4. 基于 Spring Cloud 的微服务架构实践指南(上)

    show me the code and talk to me,做的出来更要说的明白 GitHub 项目learnSpringCloud同步收录 我是布尔bl,你的支持是我分享的动力! 一. 引入 上 ...

  5. spring Boot+spring Cloud实现微服务详细教程第二篇

    上一篇文章已经说明了一下,关于spring boot创建maven项目的简单步骤,相信很多熟悉Maven+Eclipse作为开发常用工具的朋友们都一目了然,这篇文章主要讲解一下,构建spring bo ...

  6. spring Boot+spring Cloud实现微服务详细教程第一篇

    前些天项目组的大佬跟我聊,说项目组想从之前的架构上剥离出来公用的模块做微服务的开发,恰好去年的5/6月份在上家公司学习了国内开源的dubbo+zookeeper实现的微服务的架构.自己平时对微服务的设 ...

  7. Spring Cloud实战微服务入门

    1.spring cloud是什么? 是一个快速构建分布式系统的工具集,构建于Spring Boot之上 2.spring cloud 的特点 约定优于配置 开箱即用.快速启动 适用于各种环境 轻量级 ...

  8. 画了一张基于Spring Cloud的微服务系统架构图

  9. Cola Cloud 基于 Spring Boot, Spring Cloud 构建微服务架构企业级开发平台

    Cola Cloud 基于 Spring Boot, Spring Cloud 构建微服务架构企业级开发平台: https://gitee.com/leecho/cola-cloud

随机推荐

  1. Atitit 订单处理原理与功能设计attilax总结

    Atitit 订单处理原理与功能设计attilax总结 订单有三大订单分类,商品订单,充值支付订单,报名订单等..1 订单完成流程  "select * from orderv2 where ...

  2. 数字图像处理-----主成成分分析PCA

    主成分分析PCA 降维的必要性 1.多重共线性--预测变量之间相互关联.多重共线性会导致解空间的不稳定,从而可能导致结果的不连贯. 2.高维空间本身具有稀疏性.一维正态分布有68%的值落于正负标准差之 ...

  3. jQuery 2.2 和 1.12 新版本发布

    新年新气象,jQuery 团队于昨日发布了两个新版本:1.12 和 2.2.这两个版本都包含了大量的Bug修正和功能改进.基本上这会是3.0之前最后一次发布.不过由于3.0不做向下兼容,所以届时 jQ ...

  4. EL表达式中引用隐式变量

    除了在jsp中9大隐式变量(在前面文章也叫预定义变量)在转化成为servlet后_jspService中可以看到: public void _jspService(final javax.servle ...

  5. c# new关键字的三种用法

    三种用法如下: 在 C# 中,new 关键字可用作运算符.修饰符或约束. 1)new 运算符:用于创建对象和调用构造函数. 2)new 修饰符:在用作修饰符时,new 关键字可以显式隐藏从基类继承的成 ...

  6. 用junit对java代码进行测试,需要注意

    1.用@Test注解的方法必须没有返回值,返回值类型无:void 2.用@Test注解的方法必须没有参数.

  7. 单个 LINQ to Entities 查询中的两个结构上不兼容的初始化过程中出现类型“XXXX”

    最近在做一个报表的时候,用EF使用了Contact方法,但是程式运行一直出错.最近终于找到原因了,写下来提醒下自己.好了,进入正题: 现在我举个栗子,目前数据库中有ParentStudent表和Sub ...

  8. extern声明全局变量用法

    在类之外声明一个成员变量,如: a.h CString name; class a{ }; a.cpp extern CString name; 然后就可以用name这个成员变量了. b.cpp ex ...

  9. XSD 数据类型

    字符串数据类型(String Data Type) 字符串数据类型可包含字符.换行.回车以及制表符. 下面是一个关于某个 scheme 中字符串声明的例子: <xs:element name=& ...

  10. MYSQL注入天书之盲注讲解

    Background-2 盲注的讲解 何为盲注?盲注就是在sql注入过程中,sql语句执行的选择后,选择的数据不能回显到前端页面.此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注.从ba ...