3

2流高手速成记(之六):从SpringBoot到SpringCloudAlibaba - 14号程序员

 1 year ago
source link: https://www.cnblogs.com/itfantasy/p/16842900.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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的设计理念,二者又在工具链层面彼此独立,我们来看他们的区别

名称SpringCloudSpirngCloudAlibaba
注册中心 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/ 将进入登录界面:

1047129-20221030235610507-1427751077.png

 初始默认账号nacos,密码nacos,登录后看到主界面

1047129-20221031000527540-1855187302.png

 大家可以看到,最开始这里是没有内容的

2. Nacos作为注册中心

新建一个SpringCloudAlibaba工程

1047129-20221031000748888-504510733.png

我们依然延续第一节(2流高手速成记(之一):初识SpringBoot及基础项目构建 - 14号程序员 - 博客园 (cnblogs.com))中这种构建工程的方式

1047129-20221031000916696-1083224059.png

区别在于这次我们要重点勾选SpringCloud及SpringCloudAlibaba相关依赖项

1047129-20221031001015214-1642405023.png

之后我们将获得一个与之前SpringBoot模板略有不同的工程目录结构

1047129-20221031001119209-2074052114.png

我们看到工程的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主界面

1047129-20221031002303127-314701555.png

我们将看到我们的应用已经成功【注册】到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配置管理页面,新增配置

1047129-20221031004246126-1356901425.png
1047129-20221031004302974-1045983378.png

我们重新启动工程,发现在本地不存在application.properties配置的情况下,工程依然可以重新启动,并正确加载迁移到Nacos的工程配置

这就是Nacos作为“配置中心”的作用!而这种云端化配置的方式显然要比application.properties本土化配置的方式更加灵活便捷

这就是Nacos在SpringCloudAlibaba体系之下所起到的核心作用,这里其实也仅是点到为止,但相信你已经对这些概念有了一个大概的了解

本节先是引出了微服务的概念,继而阐述了SpringCloud以及SpringCloudAlibaba的区别,最后具体讲解了Nacos作为SpringCloudAlibaba体系的核心组件所起到的作用

微服务领域的学问博大精深,本节仅是引出了概念而并未做深入讨论;下一节我们将继续挖掘SpringCloudAlibaba微服务更多的机制和用法

Dubbo框架将走进我们的视野!敬请期待~


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK