2流高手速成记(之六):从SpringBoot到SpringCloudAlibaba
咱们接上回 2流高手速成记(之五):Springboot整合Shiro实现安全管理 - 14号程序员 - 博客园 (cnblogs.com)
身边常有朋友说:小项目用PHP、大项目用Java(这里绝无贬低PHP技术栈之意),曾经有兴趣对比过两种语言的技术栈
PHP有TP、Laravel这样成熟的企业级框架,Laravel更是秉持匠人精神,利用PHP诸多全新的特性,打造出了现代化的PHP全栈框架
Java则凭借SpringBoot诸多的便捷特性,以及idea这种超智能化ide的加持,相比于传统的JavaEE开发直接拔高了几个位次
二者在Web企业级应用开发领域各自占据了一席之地,设计思想层面也存在诸多的相似之处,如果非要找寻二者决定性的差异,我认为答案就在于——SpringCloud的存在!
从SpringBoot到SpringCloud/SpringCloudAlibaba,从单节点到多节点/微服务,完成这样一次蜕变,是我所期待已久的!
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。——来自百度百科
有人问SpringCloud到底是什么?我们从百科对于SpringCloud的解读不难看出几个关键信息:
1. SpringCloud是一系列框架的有序集合
2. SpringCloud与SpringBoot无缝集成,使用流程大幅简化,可基于SpringBoot实现一键部署
3. SpringCloud主要用于微服务及分布式开发,包含服务发现、配置中心、负载均衡等诸多内容
OK,现在SpringCloud是什么清楚了,那我在标题中提到的SpringCloudAlibaba又是什么?
一句话概括——SpringCloudAlibaba是SpringCloud原基础上的扩展
SpringCloudAlibaba来自国内大名鼎鼎的阿里巴巴技术团队,他们重新提取微服务框架设计理念的精髓,在原SpringCloud基础之上派生出了新的技术栈
SpringCloudAlibaba既基于SpringCloud的设计理念,二者又在工具链层面彼此独立,我们来看他们的区别
名称 | SpringCloud | SpirngCloudAlibaba |
---|---|---|
注册中心 | Eureka、Consul | Nacos |
配置中心 | SpringCloud Config | Nacos |
网关 | SpringCloud Zull | SpringCloud Gateway |
负载均衡 | Ribbon | Loadbalabcer |
熔断降级 | Hystrix | Sentinel |
服务调用 | Feign | OpenFeign |
服务总线 | Bus | Nacos |
消息中间件 | 无(第三方替代方案:rabbitmq) | RecketMQ |
分布式解决方案 | 无(第三方替代方案:2pc) | Seata |
从本节开始,我们会基于SpringCloudAlibaba做一系列讲解,原生SpringCloud相关技术栈放在之后讲解
1. Nacos
SpringCloudAlibaba体系中第一个重要角色来了!:
从上表SpringCloudAlibaba工具链构成中,我们不难发现Nacos被多次提及
Nacos在整个SpringCloudAlibaba体系中担当了多个重要角色,它既是注册中心,又是配置中心,还是服务总线
这些概念不理解?没关系,大家会在后续实际使用过程中逐渐加深认知——这是我个人很喜欢的一种风格,概念听别人讲再多,不如自己实际上手体验一次,每个人自然形成自己独有的认知
我们先移步至Nacos官网:https://nacos.io/zh-cn/index.html
前往Github下载最新的Release版本解压即可,我们到bin目录下执行命令
startup.cmd -m standalone -f naming
以单机模式启动Nacos,而后访问 http://127.0.0.1:8848/nacos/ 将进入登录界面:
初始默认账号nacos,密码nacos,登录后看到主界面
大家可以看到,最开始这里是没有内容的
2. Nacos作为注册中心
新建一个SpringCloudAlibaba工程
我们依然延续第一节(2流高手速成记(之一):初识SpringBoot及基础项目构建 - 14号程序员 - 博客园 (cnblogs.com))中这种构建工程的方式
区别在于这次我们要重点勾选SpringCloud及SpringCloudAlibaba相关依赖项
之后我们将获得一个与之前SpringBoot模板略有不同的工程目录结构
我们看到工程的resources目录下额外多出了一个bootstrap.properties文件,两个Nacos相关的Configuration配置文件暂时用不到
pom.xml中也多出了相应的版本声明及依赖项:
<properties>
......
<spring-cloud-alibaba.version>2.2.2.RELEASE</spring-cloud-alibaba.version>
<spring-cloud.version>Hoxton.SR9</spring-cloud.version>
</properties> ...... <dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
</dependency>
我们先修改下bootstrap.properties和application.properties中指向的nacos服务地址:(注意:两个配置文件下的配置都要修改)
# 设置配置中心服务端地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
而后直接启动工程,待工程启动完毕后,刷新nacos主界面
我们将看到我们的应用已经成功【注册】到Nacos服务中心
到这里你是否有种恍然大悟的感觉?这就是Nacos所担当的“注册中心”的角色!
那么我们将应用作为一个服务注册到Nacos又有什么作用呢?答案你或许已经猜到了——供其他应用调用!
这其中的机制我们留个悬念,下一节再讲
3. Nacos作为配置中心
那么nacos又是如何充当配置中心的作用?
还记得刚才多出来的那个bootstrap.properties吗?现在我们可以来聊聊它的作用了
bootstrap.properties的加载时机要优先于application.properties,一般用于指定系统级的相关配置,其配置内容一般固定不变
借助于bootstrap.properties,我们可以实现application.properties配置内容的“云端化”
我们先来看bootstrap.properties的内容:
# Nacos认证信息
spring.cloud.nacos.config.username=nacos
spring.cloud.nacos.config.password=nacos
spring.cloud.nacos.config.contextPath=/nacos
# 设置配置中心服务端地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace= # 应用名称
spring.application.name=hellospringcloudalibaba
可以看到它主要包含了Nacos相关的配置信息
最后应用名称这部分是我后续补充的
之后我们便可以移除本地的application.properties,并将其内容迁移至Nacos
打开Nacos配置管理页面,新增配置
我们重新启动工程,发现在本地不存在application.properties配置的情况下,工程依然可以重新启动,并正确加载迁移到Nacos的工程配置
这就是Nacos作为“配置中心”的作用!而这种云端化配置的方式显然要比application.properties本土化配置的方式更加灵活便捷
这就是Nacos在SpringCloudAlibaba体系之下所起到的核心作用,这里其实也仅是点到为止,但相信你已经对这些概念有了一个大概的了解
以上
本节先是引出了微服务的概念,继而阐述了SpringCloud以及SpringCloudAlibaba的区别,最后具体讲解了Nacos作为SpringCloudAlibaba体系的核心组件所起到的作用
微服务领域的学问博大精深,本节仅是引出了概念而并未做深入讨论;下一节我们将继续挖掘SpringCloudAlibaba微服务更多的机制和用法
Dubbo框架将走进我们的视野!敬请期待~
2流高手速成记(之六):从SpringBoot到SpringCloudAlibaba的更多相关文章
- 2流高手速成记(之七):基于Dubbo&Nacos的微服务简要实现
本节内容会用到之前给大家讲过的这两篇: 2流高手速成记(之六):从SpringBoot到SpringCloudAlibaba 2流高手速成记(之三):SpringBoot整合mybatis/mybat ...
- 2流高手速成记(之三):SpringBoot整合mybatis/mybatis-plus实现数据持久化
接上回 上一篇我们简单介绍了基于SpringBoot实现简单的Web开发,本节来看Web开发中必不可少的内容--数据持久化 先看项目结构: 1. 创建数据表 打开mysql,打开数据库 test (没 ...
- 2流高手速成记(之四):SpringBoot整合redis及mongodb
最近很忙,好不容易才抽出了时间,咱们接上回 上次我们主要讲了如何通过SpringBoot快速集成mybatis/mybatis-plus,以实现业务交互中的数据持久化,而这一切都是基于关系型数据库(S ...
- 2流高手速成记(之五):Springboot整合Shiro实现安全管理
废话不多说,咱们直接接上回 上一篇我们讲了如何使用Springboot框架整合Nosql,并于文章最后部分引入了服务端Session的概念 而早在上上一篇中,我们则已经讲到了如何使用Springboo ...
- 2流高手速成记(之八):基于Sentinel实现微服务体系下的限流与熔断
我们接上回 上一篇中,我们进行了简要的微服务实现,也体会到了SpringCloudAlibaba的强大和神奇之处 我们仅改动了两个注释,其他全篇代码不变,原来的独立服务就被我们分为了provider和 ...
- 高手速成android开源项目【导航篇】
Android开发又将带来新一轮热潮,很多开发者都投入到这个浪潮中去了,创造了许许多多相当优秀的应用.其中也有许许多多的开发者提供了应用开源项目,贡献出他们的智慧和创造力.学习开源代码是掌握技术的一个 ...
- 记一次SpringBoot 开发中所遇到的坑和解决方法
记一次SpringBoot 开发中所遇到的坑和解决方法 mybatis返回Integer为0,自动转型出现空指针异常 当我们使用Integer去接受数据库中表的数据,如果返回的数据中为0,那么Inte ...
- 【问题】【SpringBoot】记一次springboot框架下用jackson解析RequestBody失败的问题
最近项目中遇到了一个问题,费好大劲才发现问题所在,并且修复了问题,下面分享一下这个问题的定位和修复的新路旅程. 先说下背景:该项目用的是SpringBoot框架,主要功能为对外提供一些Restful ...
- Android高手速成--第一部分 个性化控件(View)
第一部分 个性化控件(View) 主要介绍那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.Pro ...
随机推荐
- C++ 特殊矩阵的压缩存储算法
1. 前言 什么是特殊矩阵? C++,一般使用二维数组存储矩阵数据. 在实际存储时,会发现矩阵中有许多值相同的数据或有许多零数据,且分布呈现出一定的规律,称这类型的矩阵为特殊矩阵. 为了节省存储空间, ...
- Redis安装及常用配置
Redis安装说明 大多数企业都是基于Linux服务器来部署项目,而且Redis官方也没有提供Windows版本的安装包.因此课程中我们会基于Linux系统来安装Redis. 此处选择的Linux版本 ...
- TypeScript 项目报错 Unknown file extension ".ts"
下图是该问题的详细报错截图,经过多次捣鼓,初步猜测是模块有问题,要用 ES Module 还真是曲折,最不容易出错的就是 CommonJS 模块: 在百度.Bing 上搜索了好久的帖子也都没有相关的解 ...
- 使用 Less 混合(Mixins)时报语法错误
今天在尝试使用 less 的混合语法时,浏览器直接报了一个语法错误.下图是报错信息: 仔细地阅读了官方文档,和对比自己写的,并没有任何错误. .FlexLayout { .Start() { disp ...
- HEXO-admin安装和使用(汉化版)
hi,大家好,我是KINGWDY,众所周知我用的是hexo,写博文首先要在终端输入hexo n xxxxx,然后打开MWeb PRO开始写md,但是,这很麻烦,就在我一筹莫展之际,我看到了这篇博文-- ...
- [SDOI2012]走迷宫 (强连通分量缩点,动态规划,高斯消元)
题面 Morenan被困在了一个迷宫里.迷宫可以视为N个点M条边的有向图,其中Morenan处于起点S,迷宫的终点设为T.可惜的是,Morenan非常的脑小,他只会从一个点出发随机沿着一条从该点出发的 ...
- 「雅礼集训 2017 Day7」跳蚤王国的宰相(树的重心)
题面 来源 「 雅 礼 集 训 2017 D a y 7 」 跳 蚤 王 国 的 宰 相 传 统 2000 m s 1024 M i B {\tt「雅礼集训 2017 Day7」跳蚤王国的 ...
- 「学习笔记」单调队列优化dp
目录 算法 例题 最大子段和 题意 思路 代码 修剪草坪 题意 思路 代码 瑰丽华尔兹 题意 思路 代码 股票交易 题意 思路 代码 算法 使用单调队列优化dp 废话 对与一些dp的转移方程,我们可以 ...
- MySQL插入重复数据
MySQL中批量insert into时防止更新插入重复数据去重的方法,主要是讲到了ignore,Replace,ON DUPLICATE KEY UPDATE三种方法 方案一:使用ignore关键字 ...
- 助力培养高质量AI人才,璞公英乐学平台在日本深受好评!
璞公英乐学平台(原名"璞睿魔数")自进入日本市场以来,受到日本用户的广泛好评.近日,日本AI门户网站AIsmiley在发刊的杂志<AI人才育成指南>中对璞公英乐学平台做 ...