微服务架构概念
微服务架构是一种架构概念,它的主要作用是将功能分解到离散的各个服务当中,从而降低系统的耦合性,并提供更加灵活的服务支持。
需要解决的问题:
- 客户端如何访问这些服务?
- 每个服务之间如何通信?
- 如此多的服务,如何管理?
- 服务挂了,如何解决?(备份方案,应急处理机制)
Spring Cloud Alibaba
是什么?
Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。
依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。
(地址:https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md)
为什么?
2018 年 12 月 12 日,Netflix 宣布 Spring Cloud Netflix 系列技术栈进入维护模式(不再添加新特性)
同时
2018 年 10 月 31 日的凌晨,这个伟大的日子里,Spring Cloud Alibaba 正式入驻了 Spring Cloud 官方孵化器,并在 Maven 中央库发布了第一个版本。
2019年8月1日,Spring Cloud Alibaba 发布第一个正式版本,顺利完成孵化 在 Alibaba 仓库发布第一个毕业版本
怎么做?
毕业前:
Spring Cloud Greenwich(对应springboot 2.1.x)
<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>
Spring Cloud Finchley(对应springboot 2.0.x)
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>0.2.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
毕业后:
Spring Cloud Greenwich
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
Spring Cloud Finchley
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.0.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
针对微服务需要解决的四个问题,解决方案
Nacos
是什么?
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
为什么?
解决那么多服务怎么治理?
怎么做?
环境:
- 64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
- 64 bit JDK 1.8+
- Maven 3.2.x+
下载并安装
# 下载源码
git clone https://github.com/alibaba/nacos.git
# 安装到本地仓库
cd nacos/
mvn -Prelease-nacos clean install -U
启动
cd distribution/target/nacos-server-0.7.0/nacos/bin
# Linux
./startup.sh -m standalone
# Windows
startup.cmd
基于Docker安装
git clone https://github.com/nacos-group/nacos-docker.git
cd nacos-docker
单机模式
docker-compose -f example/standalone-mysql.yaml up
集群模式
docker-compose -f example/cluster-hostname.yaml up
使用
- 添加服务发现依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
- 添加nacos客户端
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
- bootstrap.properties
(Spring Boot 配置文件的加载顺序,依次为 bootstrap.properties -> bootstrap.yml -> application.properties -> application.yml ,其中 bootstrap.properties 配置为最高优先级)
# 这里的应用名对应 Nacos Config 中的 Data ID,实际应用名称以配置中心的配置为准
spring.application.name=nacos-provider-config
# 指定查找名为 nacos-provider-config.yaml 的配置文件
spring.cloud.nacos.config.file-extension=yaml
# Nacos Server 的地址
spring.cloud.nacos.config.server-addr=192.168.233.150:8848
- 配置的动态更新,增加一个 user.name 的属性
spring:
application:
name: nacos-provider
cloud:
nacos:
discovery:
server-addr: 192.168.233.150:8848
server:
port: 8082
management:
endpoints:
web:
exposure:
include: "*"
user:
name: caps
- 入口函数添加
@EnableDiscoveryClient
- 修改 Controller ,增加一个请求方法,测试配置更新效果
// 注入配置文件上下文
@Autowired
private ConfigurableApplicationContext applicationContext;
// 从上下文中读取配置
@GetMapping(value = "/hi")
public String sayHi() {
return "Hello " + applicationContext.getEnvironment().getProperty("user.name");
}