SpringCloud-Nacos服务注册与配置中心

下载地址:
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
集群架构:

  1. Nginx集群
  2. Nacos集群
  3. 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

关于空间不足Nacos启动失败

猜你喜欢

转载自blog.csdn.net/qq_44154912/article/details/125088346