下载地址:
https://pan.baidu.com/s/1E9J52g6uW_VFWY34fHL6zA 提取码: vneh
Spring Cloud Alibaba服务注册与配置中心(非常详细)
j进入到Nacos安装目录下的bin目录, 进入cmd, 单机模式启动Nacos
startup.cmd -m standalone
访问Nacos界面, http://localhost:8848/nacos
搭建服务提供者, 注册进Nacos
pom.xml中添加依赖
<!--SpringCloud ailibaba nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
配置文件中添加
spring:
application:
name: nacos-payment-provider # 服务的名称
cloud:
nacos:
discovery:
server-addr: localhost:8848 #配置Nacos地址
management:
endpoints:
web:
exposure:
include: '*'
在启动类上添加注解
@EnableDiscoveryClient // 开启 Nacos 服务发现功能
@SpringBootApplication
public class PaymentMain9001
{
public static void main(String[] args) {
SpringApplication.run(PaymentMain9001.class, args);
}
}
controller层
@RestController
public class PaymentController
{
@Value("${server.port}")
private String serverPort;
@GetMapping(value = "/payment/nacos/{id}")
public String getPayment(@PathVariable("id") Integer id)
{
return "nacos registry, serverPort: "+ serverPort+"\t id"+id;
}
}
启动项目, 查看服务列表, 可以发现服务列表中增加了一条服务
搭建服务消费者, 注册进Nacos
引入依赖
<!--SpringCloud ailibaba nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
配置文件
spring:
application:
name: nacos-order-consumer
cloud:
nacos:
discovery:
server-addr: localhost:8848
#消费者将要去访问的微服务名称(注册成功进nacos的微服务提供者)
service-url:
nacos-user-service: http://nacos-payment-provider
启动类上加上注解: @EnableDiscoveryClient
Nacos中集成了ribbon, 所以Nacos自动支持负载均衡
定义RestTemplate 配置类, 可以用来调用调用rest服务
/**
* @auther zzyy
* @create 2020-02-23 14:45
*/
@Configuration
public class ApplicationContextConfig
{
@Bean
@LoadBalanced // 使用RestTemplate结合ribbon来做负载均衡的时候已经要加上这个注解
public RestTemplate getRestTemplate()
{
return new RestTemplate();
}
}
controller层
@RestController
@Slf4j
public class OrderNacosController
{
@Resource
private RestTemplate restTemplate;
@Value("${service-url.nacos-user-service}")
private String serverURL;
@GetMapping(value = "/consumer/payment/nacos/{id}")
public String paymentInfo(@PathVariable("id") Long id)
{
return restTemplate.getForObject(serverURL+"/payment/nacos/"+id,String.class);
}
}
启动项目
访问: http://localhost:83/consumer/payment/nacos/13 查看效果
发现9001与9002交替出现
Nacos作为配置中心
添加依赖
<!--nacos-config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--nacos-discovery-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
配置中心, Nacos作为配置中心有两个配置文件 bootstrap.yml 与 application.yml
Nacos与springcloud-config一样, 在项目初始化的时候, 要保证先从配置中心进行配置拉取, 拉取配置之后才能保证项目正常启动.
springboot中的配置文件的加载是存在优先级循序的, bootstrap优先级高于application
bootstrap.yml
# nacos配置
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
# 服务注册
discovery:
server-addr: localhost:8848 #Nacos服务注册中心地址
# 作为服务配置的客户端
config:
server-addr: localhost:8848 #Nacos作为配置中心地址
file-extension: yaml #指定yaml格式的配置
#group: DEV_GROUP
#namespace: 7d8f0f5a-6a53-4785-9686-dd460158e5d4
# ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
# nacos-config-client-dev.yaml
# nacos-config-client-test.yaml ----> config.info
application.yml
spring:
profiles:
active: dev # 表示开发环境
#active: test # 表示测试环境
#active: info
主启动类添加注解: @EnableDiscoveryClient
controller
@RestController
@RefreshScope //支持Nacos的动态刷新功能。
public class ConfigClientController
{
@Value("${config.info}")
private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo() {
return configInfo;
}
}
Nacos中dataid的组成格式及与SpringBoot配置文件中的匹配规则
Nacos添加配置文件
总结说明:
Data ID的命名规则在下面, 注意后缀名要选择yaml
启动项目, 访问: http://localhost:3377/config/info
Nacos 自带动态刷新, 修改Nacos 中nacos-config-client-dev.yaml 的配置内容, 发现请求的结果也会跟着返回
如果现在要切换配置文件
在Nacos配置中建有两个文件
nacos-config-client-dev.yaml 与 nacos-config-client-test.yaml, 他们的区别在与 tets 和 dev
如果要使用dev环境的配置文件, 就修改Nacos的配置中心模块的application.yml配置文件
Nacos分组配置
分组配置是为了在不同场景下使用相同配置文件名的情况
DataID名称相同, Group名称不相同, 相同的配置文件名, 但是不在同一个分组下
如何使用不同分组下的配置文件?
在bootstrap.yml配置文件中指定要使用的分组
下面两个配置结合起来就是去找DEV_GROUP分组下的info配置文件
效果: 说明使用的是DEV_GROUP分组下的info配置文件
Nacos命名空间配置
在命名空间中选择新建命名空间, 可以自动生成命名空间ID
服务列表与配置列表中也会多出两个空间
在dev空间中添加两个配置文件, DataID相同, 但是分组不同
在bootstrap.yml配置文件中添加分组配置与命名空间配置
namespace: 用来指定命名空间
application.yml指定dev环境
上面两个配置就会去找 命名空间id为: 63fcd633-6d24-4dc8-b2ae-fdee979b0507的命名空间中的 TEST_GROUP分组, 中的 dev环境的配置
效果:
总结: 先找命名空间, 然后找分组, 最后找环境
Nacos持久化配置
Nacos默认自带嵌入式数据库derby
每一个Nacos都自带一个derby数据库, 在做集群的时候, 没有办法保证这么多Nacos的配置能够统一
配置derby切换到mysql数据库
在Nacos的conf目录下有一个sql脚本文件: nacos-mysql.sql
1.新建一个数据库: nacos_config
2.运行脚本文件
3.修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=root
重启Nacos后, 添加的配置都会添加到mysql表中
Nacos集群配置
Nacos 2.0.3 Linux系统搭建集群详细教程
在实际的生产环境中至少要有三台Nacos, 如果只有一台, 一旦发生单点故障, 整个服务直接GG
集群架构:
- Nginx集群
- Nacos集群
- Mysql集群(主从分离)
Linux下安装Nacos
下载nacos-server-2.1.0.tar.gz
下载 nacos-server-1.4.2.tar.gz
在/opt下新建mynacos, 存放nacos集群,
上传nacos-server-2.1.0.tar.gz到mynacos, 解压
tar -zxvf nacos-server-2.1.0.tar.gz
配置nacos对应mysql持久化
配置Nacos数据库地址: 新建数据库nacos-config, 运行config下的sql脚本
修改application.properties文件, 添加
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=root
Linux服务器上nacos的集群配置cluster.conf
使用hostname - i 命令来查看 机器的真实ip
这个ip不能写127.0.0.1, 必须是Linux命令hostname -i 能够识别的ip
设定三台机器作为集群, 端口分别是333,444,555
编辑 cluster.conf* 文件, 删除所有内容, 然后添加下面内容
你的ip:333
你的ip:444
你的ip:555
搭建集群
修改 application.properties 文件, 配置mysql
修改 cluster.conf文件, 配置集群端口号
复制三分nacos_3333, nacos_4444, nacos_5555
将其application.properties 配置文件中的 server.port 修改为 3333, 4444, 5555
分别进入bin目录启动
./startup.sh
启动成功之后执行命令查看进程
ps -ef|grep nacos
配置nginx
编辑nginx配置文件, 添加:
upstream cluster{
server 127.0.0.1:3333
server 127.0.0.1:4444
server 127.0.0.1:5555
}
server {
listen 1111;
server_name localhost;
location / {
proxy_pass http://cluster;
}
}
重启nginx ./nginx -c 指定配置文件启动
./nginx -c /www/server/nginx/conf/nginx.conf