Spring Cloud Alibaba

x33g5p2x  于2022-02-09 转载在 Spring  
字(7.2k)|赞(0)|评价(0)|浏览(183)

Spring Cloud Alibaba

一、简介

官网:https://spring.io/projects/spring-cloud-alibaba
Spring Cloud Alibaba provides a one-stop solution for distributed application development. It contains all the components required to develop distributed applications, making it easy for you to develop your applications using Spring Cloud.

With Spring Cloud Alibaba, you only need to add some annotations and a small amount of configurations to connect Spring Cloud applications to the distributed solutions of Alibaba, and build a distributed application system with Alibaba middleware.

Spring Cloud Alibaba 提供分布式应用开发的一站式解决方案。它包含开发分布式应用程序所需的所有组件,使您可以轻松使用 Spring Cloud 开发应用程序。

使用 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,即可将 Spring Cloud 应用连接到 Alibaba 的分布式解决方案,并通过 Alibaba 中间件构建分布式应用系统。

微服务实战项目开发

  1. 服务注册中心 ===> Nacos
  2. 服务间通信 ===> Openfeign
  3. 服务流控与服务降级 ===> Sentinel
  4. 服务网关 ===> Gateway
  5. 统一配置中心 ===> Nacos

二、环境搭建

构建项目并引入依赖

<properties>
    <spring-cloud.version>Hoxton.SR6</spring-cloud.version>
    <spring.cloud.alibaba.version>2.1.2.RELEASE</spring.cloud.alibaba.version>
</properties>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>${spring.cloud.alibaba.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

三、Nacos

3.1、什么是Nacos

官网:https://nacos.io/zh-cn/index.html

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

Name Service(服务注册与发现) & Configurations Services(统一配置中心)

总结:Nacos就是微服务架构中服务注册中心以及统一配置中心,用来替换原来的(eureka,consul)以及config组件

3.2、安装nacos

这里选用linux环境,注意安装nacos前,要保证 jdk1.8+、maven3.2.x+ 环境

1.下载nacos

https://github.com/alibaba/nacos/releases

2.解压缩安装包到指定位置

- [root@localhost ~]# tar -zxvf nacos-server-1.3.1.tar.gz 
- bin  			启动nacos服务的脚本目录
- conf 			nacos的配置文件目录
- target 		nacos的启动依赖存放目录
- data		  nacos启动成功后保存数据的目录

3.启动安装服务

- linux/unix/mac启动
	打开终端进入nacos的bin目录执行如下命令 
	./startup.sh -m standalone

4.访问nacos的web服务管理界面 http://localhost:8848/nacos/

- 用户名 和 密码都是 nacos

3.3、开发服务注册到nacos

1、创建项目并引入依赖

<!--引入nacos client的依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2、配置注册地址

server.port=8789 			
spring.application.name=NACOSCLIENT
spring.cloud.nacos.server-addr=ip:8848								 #指定nacos服务总地址
spring.cloud.nacos.discovery.server-addr=${spring.cloud.nacos.server-addr}   #指定注册中心地址

3、加入启动服务注册注解

注意:新版本springcloud只要引入依赖后,默认开启服务注册与发现,可以不写 @EnableDiscoveryClient

4、查看nacos的服务列表

3.4、服务间通信

由于springcloud alibaba中没有提供服务间通信的组件,所以还采用 openFeign,方式与之前springcloud中一致,这里不再写

3.5、使用nacos作为统一配置中心

3.5.1、从nacos获取配置

1、创建项目并引入nacons配置中心依赖

<!--引入nacos client 依赖-->
<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-alibaba-nacos-config</artifactId>
</dependency>

2、添加配置文件 bootstrap.properties

spring.cloud.nacos.server-addr=localhost:8848								# 远程配置中心的地址
spring.cloud.nacos.config.server-addr=${spring.cloud.nacos.server-addr}     # 去指定nacos地址读取配置
spring.cloud.nacos.config.group=DEFAULT_GROUP								# 读取配置的分组
spring.cloud.nacos.config.file-extension=properties					        # 指定读取文件后缀
spring.cloud.nacos.config.name=configclient-dev                             # 指定文件名

配置文件名称必须是bootstrap.properties|yml,否则会启动报错,让项目在启动时先预拉取远程配置

3、在nacos中创建配置

4、编写控制器测试配置读取情况

@RestController
public class ConfigClientController {
   
   private static final Logger log = LoggerFactory.getLogger(ConfigClientController.class);
   @Value("${user.name}")
   private String name;

   @GetMapping("/demo")
   public String demo() {
      log.info("username:{}", name);
      return name;
   }
}
3.5.2、实现自动配置刷新

默认情况下nacos已经实现了自动配置刷新功能,如果需要刷新配置直接在控制器中加入 @RefreshScope 注解即可

3.5.3、DateId

dateId = ${prefix}-${spring.profile.active}.${file-extension}

dateId = spring.cloud.nacos.config.name + spring.cloud.nacos.config.file-extension

读取远程配置中心的配置文件有两种方式:

  • ${prefix}-${spring.profile.active}.${file-extension}
- a. prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
	
- b. spring.profile.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}

- c. file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
  • ${name}.${file-extension}
- name 指的就是文件名,比如configclient-dev,可以通过配置项spring.cloud.nacos.config.name来设置

- file-exetension 文件后缀,即文件的数据格式
3.5.4、命名空间

https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config

用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。

在没有明确指定 ${spring.cloud.nacos.config.namespace} 配置的情况下, 默认使用的是 Nacos 上 Public 这个namespae。如果需要使用自定义的命名空间,可以通过以下配置来实现:

每个命名空间都有一个唯一id,这个id是读取配置时指定空间的唯一标识

spring.cloud.nacos.config.namespace=b3404bc0-d7dc-4855-b519-570ed34b62d7

注意:该配置必须放在 bootstrap.properties 文件中。

3.5.5、配置分组

Nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。

在没有明确指定 ${spring.cloud.nacos.config.group} 配置的情况下, 默认使用的是 DEFAULT_GROUP 。如果需要自定义自己的 Group,可以通过以下配置来实现:

spring.cloud.nacos.config.group=YinXue

注意:该配置必须放在 bootstrap.properties 文件中。并且在添加配置时 Group 的值一定要和 spring.cloud.nacos.config.group 的配置值一致。

3.6、nacos持久化

在0.7版本之前,在单机模式时nacos使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况。0.7版本增加了支持mysql数据源能力,具体的操作步骤:

spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://11.162.196.16:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=nacos_devtest
db.password=youdontknow

再以单机模式启动nacos,nacos所有写嵌入式数据库的数据都写到了mysql

3.7、nacos集群搭建

官网:https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html

nacos集群架构图

# 1.集群搭建注意事项
- 注意: 
	a.3个或3个以上Nacos节点才能构成集群。
	b.要求虚拟机内存分配必须大于2G以上

# 2.集群规划
-	node cluster:
	10.15.0.3 8845 nacos01
	10.15.0.3 8846 nacos02
	10.15.0.3 8847 nacos03
	10.15.0.3 9090 nginx
	10.15.0.3 3306 mysql

# 3.搭建nacos集群
	1).将nacos安装包从新解压缩
	2).开启nacos mysql持久化
		 注意:数据库中不能存在原始数据
	3).修改nacos conf目录中cluster.conf文件添加所有集群节点
		10.15.0.3:8845
		10.15.0.3:8846
		10.15.0.3:8847			
	4).将修改后nacos复制三份 
		注意:修改为不同端口信息
	
	5).分别启动三台机器
		./startup.sh

# 4.安装Nginx
- 0.安装必要依赖
	yum install -y gcc pcre-devel zlib-devel
- 1.下载Nginx
	http://nginx.org/en/download.html

- 2.将Nginx上传到linux中,并解压缩
	 tar -zxvf nginx-1.11.1.tar.gz

- 3.查看Nginx安装目录
	[root@localhost nginx-1.11.1]# ls
	auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src

- 4.在Nginx安装目录中执行如下命令:(指定安装位置)
	./configure --prefix=/usr/nginx

- 5.执行上述命令后,执行如下命令:
	make && make install

# 5.配置nginx conf配置文件
	a.加入如下配置:
	upstream  nacos-servers {
    	server 10.15.0.3:8845;
		server 10.15.0.3:8846;
		server 10.15.0.3:8847;
	}
	b.修改
	location / {
      proxy_pass http://nacos-servers/;
  	}

# 6.启动nginx进行测试即可

相关文章