Spring Cloud Alibaba 的学习之入门篇

微服务架构概念

微服务架构是一种架构概念,它的主要作用是将功能分解到离散的各个服务当中,从而降低系统的耦合性,并提供更加灵活的服务支持。

需要解决的问题:

  • 客户端如何访问这些服务?
  • 每个服务之间如何通信?
  • 如此多的服务,如何管理?
  • 服务挂了,如何解决?(备份方案,应急处理机制)

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 
使用
  1. 添加服务发现依赖
       <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
       </dependency>
  1. 添加nacos客户端
<dependency>
   <groupId>com.alibaba.cloud</groupId>
   <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
  1. 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
  1. 配置的动态更新,增加一个 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
  1. 入口函数添加
    @EnableDiscoveryClient
  2. 修改 Controller ,增加一个请求方法,测试配置更新效果
// 注入配置文件上下文
@Autowired
private ConfigurableApplicationContext applicationContext;

// 从上下文中读取配置
@GetMapping(value = "/hi")
public String sayHi() {
    return "Hello " + applicationContext.getEnvironment().getProperty("user.name");
}
posted @ 2019-08-12 15:34  彼时岸边  阅读(1940)  评论(1编辑  收藏  举报