基于Spring Cloud的微服务入门教程
(本教程的原地址发布在本人的简书上: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(分布式配置)等。
以下为本教程的目录
教程的源码
https://gitee.com/rain7564/spring_microservices_study
注:
- 学习本教程需要一定的Spring Boot基础,若读者未接触或不熟悉,请下载根目录的“Spring Boot实战 ,丁雪丰 (译者).pdf”,然后自行学习。Spring Boot学深一点,搭建基于Spring Cloud的微服务云应用时不会太吃力。
- 本教程使用的IDE是idea,建议大家学习的时候也使用。
- 若使用idea,建议先配置好maven、git等。
基于Spring Cloud的微服务入门教程的更多相关文章
- 基于 Spring Cloud 的微服务架构实践指南(下)
show me the code and talk to me,做的出来更要说的明白 本文源码,请点击learnSpringCloud 我是布尔bl,你的支持是我分享的动力! 一.引入 上回 基于 S ...
- 干货|基于 Spring Cloud 的微服务落地
转自 微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务.但如果要将微服务架构运用到生产项目上,并且能够发挥该架构模式的重要作用,则需要微服务框架的支持. 在Java生态圈,目前使用较多的 ...
- 基于Spring Cloud的微服务落地
微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务.但如果要将微服务架构运用到生产项目上,并且能够发挥该架构模式的重要作用,则需要微服务框架的支持. 在Java生态圈,目前使用较多的微服务 ...
- 基于 Spring Cloud 的微服务架构实践指南(上)
show me the code and talk to me,做的出来更要说的明白 GitHub 项目learnSpringCloud同步收录 我是布尔bl,你的支持是我分享的动力! 一. 引入 上 ...
- spring Boot+spring Cloud实现微服务详细教程第二篇
上一篇文章已经说明了一下,关于spring boot创建maven项目的简单步骤,相信很多熟悉Maven+Eclipse作为开发常用工具的朋友们都一目了然,这篇文章主要讲解一下,构建spring bo ...
- spring Boot+spring Cloud实现微服务详细教程第一篇
前些天项目组的大佬跟我聊,说项目组想从之前的架构上剥离出来公用的模块做微服务的开发,恰好去年的5/6月份在上家公司学习了国内开源的dubbo+zookeeper实现的微服务的架构.自己平时对微服务的设 ...
- Spring Cloud实战微服务入门
1.spring cloud是什么? 是一个快速构建分布式系统的工具集,构建于Spring Boot之上 2.spring cloud 的特点 约定优于配置 开箱即用.快速启动 适用于各种环境 轻量级 ...
- 画了一张基于Spring Cloud的微服务系统架构图
- Spring Cloud Alibaba微服务架构入门最容易理解篇
微服务架构介绍 Spring Cloud Alibaba推荐的微服务生态架构基于分层架构实现如下: 接入层:最外层为LVS+Keepalived,可承受几十万级高并发流量洪峰,然后再通过内层的ngin ...
随机推荐
- centos下部署NTP时间服务器同步环境记录
1)服务端部署 安装所需软件包 [root@test ~]# yum -y install ntp ntpdate 服务端自己先手工同步一次时间. [root@test ~]# ntpdate ntp ...
- 阿里云OSS下载pdf文件,并在pdf文件上添加水印
代码: 兵马未动,粮草先行 作者: 传说中的汽水枪 如有错误,请留言指正,欢迎一起探讨. 转载请注明出处. 公司要求从阿里云OSS下载pdf文件并且需要添加水印. 因此这里总结一下. 首先添加了一个F ...
- D. Boxes Packing
链接 [http://codeforces.com/contest/1066/problem/D] 题意 题目大意 n个物品m个篮子每个篮子容量为k 每个物品重量为a[i] 问能装多少物品 这个人是强 ...
- 软工个人作业-博客作业-WEEK2
1.是否需要代码规范: (1)这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西. 首先来说,从短期上和个体上来看,一个团队的代码风格必然会在一定程 ...
- PAT 1022 D进制的A+B
https://pintia.cn/problem-sets/994805260223102976/problems/994805299301433344 输入两个非负10进制整数A和B(<=2 ...
- mysql的group_concat对应oracle的wm_concat
mysql的group_concat对应oracle的wm_concat http://bey2nd.blog.163.com/blog/static/12063183120124313360964/
- activiti-explorer disable demo
https://community.alfresco.com/thread/203012-activiti-explorer engine.properties # demo data propert ...
- Laravel route ---- resoure
Laravel 路由--资源路由 Route::resource('blog', 'BlogController'); 上面代码将等同于: Route::get('/blog', 'BlogContr ...
- SLAM中的变换(旋转与位移)表示方法
1.旋转矩阵 注:旋转矩阵标题下涉及到的SLAM均不包含位移. 根据同一点P在不同坐标系下e(e1,e2,e3)e'(e1',e2',e3')的坐标a(a1,a2,a3)a'(a1',a2',a3') ...
- number (1)eclipse 连接数据库报错 数据库信息不对导致的出错