目录
前言
Spring Cloud Alibaba 是什么?
Spring Cloud Alibaba 是阿里巴巴提供的微服务开发一站式解决方案,是阿里巴巴开源中间件与 Spring Cloud 体系的融合。
一、为什么要学习微服务?
1. 求职时增强技术自信。
微服务是非常热门的话题,企业招聘中也越来越多的要求有微服务开发、架构能力,不掌握一些微服务技能找工作时也缺乏亮点,可以说微服务架构已经成为中高级后端开发人员、架构师的必备技能。
2. 提升技术实力,增加职业转型的可能性。
长期从事局部功能开发,会导致全局掌控能力缺失。软件系统是一个复杂工程,只有从更高的角度统观全局,考虑业务的方方面面以及未来可能的演进方向,才能深刻理解一个产品或项目的内在含义,而这个话语权往往掌握在更高职级的开发者、设计师、架构师手中,如果掌握了一套微服务架构、开发理念,增加了向更高职级晋升的可能性。
3. 解决工作中软件研发难题。
随着软件复杂度的提升,社会分工的越来越细,单体应用或者粗放式的软件服务,大量功能代码堆积在一起,显得特别臃肿繁杂,开发维护成本很高。这在日常运维、升级维护时非常不便,一个小功能的变更都有可能导致整个工程出现问题甚至宕机,如果是运行中的生产环境崩溃,由此所造成的经济损失或不好的社会影响,将是不可估量的。而引入微服务,可以更好的解决这一系列的问题。
4. 保持技术的前瞻性。
研发技术迭代日新月异,新概念新应用也是层出不穷,云原生架构、容器化运维、中台等等,都与微服务有着微妙的关系,只有保持技术的持续性,才能更好的学习新技术,否则会很不利于新技术的落地应用。
二、为什么使用spring cloud alibaba?
很多人可能会问,有了spring cloud这个微服务的框架,为什么又要使用spring cloud alibaba这个框架了?最重要的原因在于spring cloud中的几乎所有的组件都使用Netflix公司的产品,然后在其基础上做了一层封装。然而Netflix的服务发现组件Eureka已经停止更新,我们公司在使用的时候就发现过其一个细小的Bug;而其他的众多组件预计会在明年(即2020年)停止维护。所以急需其他的一些替代产品,也就是spring cloud alibaba,目前正处于蓬勃发展的态式。
三、微服务有什么用?能解决实际业务场景中哪些问题?
将单体应用分拆成多个小体量的的高内聚低耦合的软件服务,可以采用不同的软件语言,不同的数据存储,每个小服务独立部署运行,服务间采用轻量级的通信机制,由不同的团队开发和维护,大大提高了软件的可维护性、扩展性。采用微服务架构,可以帮助我们很好的解决实际业务场景中的问题:
-
从组织层面讲,系统的分工更加明确,责任更加清晰。
-
按照业务来划分服务,单个服务代码量小,业务单一,更易于维护。
-
服务能力更专一,代码重复度降低,可复用性高,使服务调用更加简便。
-
服务之间耦合性低,可随时加入服务,剔除过时服务。
-
单个服务也可以弹性扩展,容错能力更强,
-
更贴合云时代背景的软件开发运维环境,高效自动化构建部署。
-
数据存储解耦,不必将所有数据集中在一个大库中,不易拆分扩容。
四、注册中心Nacos
nacos是阿里巴巴研发的一个集注册中心与配置中心于一体的管理平台,使用其他非常的简单。下载地址为:
https://github.com/alibaba/nacos/releases,nacos的主页如下图所示:
其中默认的登录名和密码是:nacos/nacos
4.1更改用户名和密码
A. 分别执行conf目录下的nacos-mysql.sql两个脚本文件,生成的数据表如下:
B. 重新配置密码
新建一个springboot的项目,引入如下的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
生成密码的Java代码:
// 密码加密处理
public static void main(String[] args) {
BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
// 生成的密码为:$2a$10$04MGTL.cJNZPpR3rFt/I2.43F.V75NH.5wdK.jngaO9Mc91mfonAO
System.out.println(bCryptPasswordEncoder.encode("admin"));
}
执行如下sql命令:
insert into users values('nacos','$2a$10$04MGTL.cJNZPpR3rFt/I2.43F.V75NH.5wdK.jngaO9Mc91mfonAO', 1);
insert into roles values('nacos', 'ROLE_ADMIN')
C. 配置数据库的连接
在conf目录下的application.properties目录下加入如下内容:
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://mysql:3306/cloud-alibaba?useSSL=false&serverTimezone=UTC&serverTimezone=Asia/Shanghai
db.user=root
db.password=
4.2 nacos集群配置
A. 将conf目录下的cluster.conf.example拷贝一份重命名为cluster.conf,在文件中加入所有集群节点的ip和端口号,文件内容如下:
127.0.0.1:8848
127.0.0.1:9948
B. 修改windows启动文件 startup.cmd
的配置,修改内容如下:
set MODE="standalone" #默认的配置
set MODE="cluster" #修改后的内容
注:如果是Linux环境不用作任何的修改。
C.启动两个nacos,界面中出现如下的内容,表示集群配置成功
五、服务提供方
pom.xml依赖配置
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>0.9.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
配置
spring:
application:
# 服务名
name: alibaba-provider
cloud:
nacos:
discovery:
#必须配置ip地址
server-addr: 172.18.96.177:8848,172.18.96.177:9948