本文最后更新于2 分钟前,文中所描述的信息可能已发生改变。
CAP概念
C: 一致性 、A:可用性 、P:分区容错性
Nacos与启动
Nacos:Eureka + Config + Bus 包含了注册中心、配置中心、动态刷新配置的功能,即是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
启动:在安装 nacos 的 bin 目录下输入命令:startup.cmd -m standalone
即以单机模式启动。
父工程
依赖:
xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ecjtu</groupId>
<artifactId>spring-cloud-alibaba</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>alibaba-provider</module>
<module>alibaba-provider2</module>
<module>nacos-consumer</module>
</modules>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.17</version>
</parent>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring-cloud-alibaba.version>2021.0.4.0</spring-cloud-alibaba.version>
<spring-cloud.version>2021.0.8</spring-cloud.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>
</project>
服务方配置
- 依赖引入
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
- yml配置文件
yml
server:
port: 8000
spring:
application:
name: alibaba-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848 #nacos注册中心地址
- 启动类上加上
@EnableDiscoveryClient
消费方配置
- 依赖引入
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<!-- 需要排除掉其中的ribbon,因为已经不再使用,使用的是spring-cloud-starter-loadbalancer -->
<exclusions>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 使用loadbalancer来作为负载均衡策略 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
- yml配置文件
yml
server:
port: 9000
spring:
application:
name: nacos-consumer
cloud:
loadbalancer:
ribbon:
enabled: false # 禁用ribbon
nacos:
discovery:
server-addr: localhost:8848
- 启动类上加上
@EnableDiscoveryClient
- 在配置类中将 RestTemplate 注入容器
java
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
- 在需要使用 RestTemplate 的地方注入即可
与OpenFeign组件集成
就是导入依赖,和在Eureka中的配置一样,可以将这个组件看成是单独的东西。
Nacos配置中心
Nacos本身作为配置中心,不需要另外创建一个服务。
- 在需要配置中心的服务中引入依赖
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<!--nacos配置中心依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
- 启动类上加上
@EnableDisCoveryClient
在controller层加上注解@RefreshScope
和Netflix的配置中心使用大差不差 - 配置文件 application.yml
yaml
# 指定要从nacos中获取那个环境下的配置文件
spring:
profiles:
active: dev
bootstrap.yml
yaml
server:
port: 8888
spring:
application:
name: nacos-config
cloud:
nacos:
discovery:
server-addr: localhost:8848 # 注册中心地址
config:
server-addr: localhost:8848 # 配置中心地址
file-extension: yaml # 指定文件类型
#group: BJ_GROUP # 指定配置文件所在分组
#namespace: 5b493dad-ea2a-464f-aab7-87cecdf6e3c7 #指定命名空间id
配置文件持久化存储
- 初始化数据库 在 nacos 的 conf 目录下面有 mysql-schema.sql 文件,在自己创建的数据库中使用该文件初始化即可。
- 在安装 nacos 的目录下的 conf 中的 application.properties 文件中打开并修改以下配置,将数据库名称、用户名、密码修改为自己的:
yaml
#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
### Deprecated configuration property, it is recommended to use `spring.sql.init.platform` replaced.
spring.datasource.platform=mysql
# spring.sql.init.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=nacos #改为自己的
db.password.0=nacos #改为自己的
集群配置
就是在Linux下载安装,更改配置文件中的端口,数据库,并启动就行。
Nginx负载均衡
修改配置文件中 http 下的部分
xml
upstream cluster{
server 192.168.246.128:6666; # nacos的ip和端口
server 192.168.246.128:7777;
server 192.168.246.128:8888;
}
server {
listen 5555;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
#root html;
#index index.html index.htm;
proxy_pass http://cluster;
}
}
SpringCloud Alibaba Sentinel哨兵实现熔断与限流(替代Hystrix)
把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。需要去Github上下载并安装 Sentinel中文文档 。安装好后在cli中使用java -jar sentinel-dashboard-x.x.x.jar
将 java 程序运行起来,用户浏览器中访问 localhost:8080
即可访问Sentinel控制台页面(账号密码默认sentinel),程序访问8719端口。
Sentinel配置持久化
- 引入依赖
xml
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
- 配置文件配置
yml
spring:
cloud:
sentinel:
datasource:
ds1:
nacos: # 将配置信息存到nacos当中
server-addr: localhost:8848
dataId: ${spring.application.name} # 该服务的服务名
groupId: DEFAULT_GROUP # 配置信息将要配置到哪个组
data-type: json # 配置格式
rule-type: flow # 属于流控规则的配置