SpringCloud Alibaba—Nacos服务注册和配置中心

一.概念

1.什么是nacos?

nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

nacos就是注册中心+配置中心的组合,即nacos=Eureka+Config+bus

2.各种注册中心比较?

在这里插入图片描述
在这里插入图片描述

3.Nacos支持AP和CP模式的切换

在这里插入图片描述

4.下载并运行Nacos?

下载地址:https://github.com/alibaba/nacos/releases/tag/1.1.4

运行:下载完,确保java环境与maven环境无误,执行进入到bin目录startup.cmd -m standalone 以单机版启动nacos(默认是集群式,没有集群会启动失败)
在这里插入图片描述
访问:http://127.0.0.1:8848/nacos

默认账号密码为nacos
在这里插入图片描述

在这里插入图片描述


二.把服务提供者注册到nacos

1.引入依赖

<!--SpringCloud ailibaba nacos -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <!-- SpringBoot整合Web组件 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--监控-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <!--日常通用jar包配置-->
        <!--热部署-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!--测试-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

2.配置文件

server:
  port: 9001
spring:
  application:
    name: nacos-provider
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848  #注册到nacos的地址
management:
  endpoints:
    web:
      exposure:
        include: '*'  #暴露所有监控端口

3.编写主启动类

@EnableDiscoveryClient
@SpringBootApplication
public class PaymentMain9001
{
    public static void main(String[] args) {
            SpringApplication.run(PaymentMain9001.class, args);
    }
}

4.编写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;
    }
}

5.测试

启动测试,访问http://127.0.0.1:9001/payment/nacos/1无误后,打开nacos,可以看到服务成功注册到nacos
在这里插入图片描述
为了测试集群,再建一个9002与9001一致
在这里插入图片描述


三.把服务消费者注册到Nacos

1.导入依赖

    <dependencies>
        <!--SpringCloud ailibaba nacos -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <dependency>
            <groupId>com.sise</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>

        <!--web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--监控-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <!--热部署-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!--测试-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

2.配置文件

server:
  port: 83

spring:
  application:
    name: nacos-order-consumer

  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #去哪里发现服务

service-url:
  nacos-user-service: http://nacos-provider #通过服务提供者的名称调用服务

3.消费者启动类

@SpringBootApplication
@EnableDiscoveryClient
public class OrderNacosMain83 {

    public static void main(String[] args) {
        SpringApplication.run(OrderNacosMain83.class,args);
    }
}

4.RestTemplate配置类

@Configuration
public class ApplicationContextConfig {
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

5.消费者访问接口

@RestController
@Slf4j
public class OrderNacosController {
    
    @Autowired
    private RestTemplate restTemplate;

    @Value("${service-url.nacos-user-service}")
    private String serverUrl;

    @GetMapping("/consumer/payment/nacos/{id}")
    public String paymentInfo(@PathVariable("id") Long id){
        return restTemplate.getForObject(serverUrl+"/payment/nacos/"+id,String.class);
    }
}

6.测试

先查看nacos是否注册上(其实消费端不用注册也可以)
在这里插入图片描述

Nacos天生支持负载均衡因为依赖引入了ribbon
访问http://127.0.0.1:83/consumer/payment/nacos/1成功
在这里插入图片描述
在这里插入图片描述


四.Nacos服务配置中心

1.导入依赖

  <dependencies>
        <!--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>

        <!--web + actuator监控-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--一般基础配置-->
        <!--热部署-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!--测试-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

2.配置文件

application.yml

spring:
  profiles:
    active: dev

bootstrap.yml

server:
  port: 3377

spring:
  application:
    name: nacos-config-client

  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #服务注册中心地址

      config:
        server-addr: localhost:8848 #配置中心地址
        file-extension: yaml #指定yaml格式的配置

3.启动类

@EnableDiscoveryClient
@SpringBootApplication
public class NacosConfigClientMain3377
{
    public static void main(String[] args) {
        SpringApplication.run(NacosConfigClientMain3377.class, args);
    }
}

4.controller调用

@RestController
@RefreshScope //支持Nacos的动态刷新功能。
public class ConfigClientController
{
    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/config/info")
    public String getConfigInfo() {
        return configInfo;
    }
}

5.创建Nacos远程配置文件

Nacos中的dataid的组成格式与SpringBoot配置文件中的匹配规则
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
所以,需要在nacos配置中心配置一个名为nacos-config-client-dev.yaml的配置文件,作为项目的远程配置文件
在这里插入图片描述
在这里插入图片描述

6.测试

访问 http://127.0.0.1:3377/get/Info
在这里插入图片描述
在这里插入图片描述
动态刷新,将版本号修改,3377立即修改,自带动态刷新
在这里插入图片描述


五.Nacos分类管理

1.基本概念

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 类似Java里面的package名和类名
  • 最外层的namespace是可以用于区分部署环境的, Group和DatalD逻辑上区分两个目标对象

Nacos默认的命名空间是public, Namespace主要用来实现隔离。
比方说我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个Namespace, 不同的Namespace之间是隔离的。

Group默认是DEFAULT_ GROUP
Group可以把不同的微服务划分到同一个分组里面去**

Service就是微服务;
一个Service可以包含多个Cluster (集群) ,Nacos默认Cluster是DEFAULT, Cluster是对指定微服务的一 个虚拟划分。
比坊说为了容灾,将Service微服务分别部署在了杭州机房和广州机房,这时就可以给杭州机房的Service微服务起一 个集群名称(HZ) 给广州机房的Service微服务起一个集群名称(GZ),还可以尽量让同一个机房的微服务互相调用,以提升性能。

后是Instance,就是微服务的实例。

Namepace+group+dataID

2.DataID方案配置

指定spring.profile.active和配置文件的DataID来使不同环境下读取不同的配置

新建Test,两个DataID
在这里插入图片描述
3377通过指定不同开发环境,切换配置,(这时这里的配置名就组成了nacos-config-client-test.yaml )

spring:
  profiles:
    #active: dev
    active: test

测试
切换为test了,配置是什么就加载哪个文件
在这里插入图片描述



六.Group方案配置

1.新建相同DataID 不同组的两个配置文件

通过Group实现环境区分,新建nacos-config-client-info.yaml

在这里插入图片描述

在这里插入图片描述

2. 修改3377的application.yml

spring:
  profiles:
    #active: dev
    #active: test
    active: info

3.在bootStrap.yml 里添加组

在这里插入图片描述

4.启动测试

在这里插入图片描述


七.Namespace配置方案

1.新建dev和test命名空间

在这里插入图片描述
在这里插入图片描述

2.新建相同DataID和namespace,不同GROUP的配置文件

这里以dev环境做测试

每一个Namespace都有自己的唯一id
在这里插入图片描述
新建3个配置,同一个DataID,不同GROUP,同一个namespace里,模拟在dev环境(namespace)里,有着一致的名字,根据组选择不同的配置文件(相同的名字就只需要修改3377的group就行)
在这里插入图片描述

在这里插入图片描述

3.在3377添加对应的命名空间及配置

在这里插入图片描述
在这里插入图片描述

4.测试

根据上面的配置,3377,启动后就会去,88993633-7913-4605-a611-1c65664d5107对应的namespace(dev命名空间)里找DEV_GROUP这个组的nacos-config-client-dev.yml
在这里插入图片描述

5.总结

一个系统中可以作为是一个group,group里有多个配置(DataID),每个配置对应一种环境

有多个微服务子项目可以使用namespace,一个项目对应一个namespace,namespace里有多个group,group对应多个开发环境,group里有多个配置,配置里能是不同的配置方案



八.Nacos持久化配置

1.Nacos支持三种部署模式

在这里插入图片描述

2.单机模式配置mysql

如果不配置mysql搭建集群的化,由于每个nacos持久化存储数据都是使用自己内嵌的数据库(Derby) 会导致数据一致性问题,所以需要配置mysql
在这里插入图片描述

  • 初始化数据库文件,在nacos/condfig下有一个sql文件,将它初始化到mysql
    在这里插入图片描述
    在这里插入图片描述
  • 修改nacos配置文件nacos\conf\application.properties,添加以下配置,注意需要加时区
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?serverTimezone=UTC&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=你数据库用户
db.password=废话,肯定是你密码
  • 启动nacos,可以看到是个全新的空记录界面,以前是记录进derby,现在配置了mysql
    在这里插入图片描述
  • 新建一个配置文件,数据存储到mysql
    在这里插入图片描述
    在这里插入图片描述



九.Linux上配置集群

所以可以理解为我们需要像下面这张图一样配置集群模式
在这里插入图片描述

1.基本配置

在linux配置好mysql

  • 下载nacos LInux版https://github.com/alibaba/nacos/releases/tag/1.4.1

  • 在linux系统中解压,并且编辑application.properties

  • 在配置文件里添加mysql配置,不使用默认内嵌的数据库
    在这里插入图片描述
    在这里插入图片描述

2.Linux服务器上nacos的集群配置cluster.conf

  • 先备份cluster.conf.example
    在这里插入图片描述
  • 梳理出3台nacos机器的不同服务端口号
    这个IP不能写127.0.0.1,必须是Linux命令hostname -i能够识别的IP
    在这里插入图片描述

在这里插入图片描述

3.编辑Nacos的启动脚本/mynacos/nacos/bin/startup.sh,使他能够接受不同的启动端口

在这里插入图片描述

  • 修改内容

在这里插入图片描述

4.配置nginx

消费端不在选择固定的nacos地址,而是交给nginx转发

  • 修改nginx.conf
    在这里插入图片描述
  • 启动nginx
    在这里插入图片描述

5.启动测试

在这里插入图片描述

修改消费端地址
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值