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

前言

Nacos是阿里巴巴推出的一款新的开源项目,致力于在微服务中更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
主要作用就是服务注册和配置,用一个Nacos,相当于代替了原来SpringCloud系列中的Eureka+Config+Bus。

官网地址:官网文档
下载地址:下载
下载后解压,直接运行bin目录下的startup.cmd文件
运行成功后访问地址:http://localhost:8848/nacos 账号密码默认为nacos
在这里插入图片描述

Nacos作为服务注册中心实例

准备三个微服务:两个服务提供者9001/9002 、一个服务消费者83

1、pom依赖

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

2、依赖

server:
  port: 9001

spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #配置Nacos地址
#暴露监控端点
management:
  endpoints:
    web:
      exposure:
        include: '*'
server:
  port: 9002

spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #配置Nacos地址
#暴露监控端点
management:
  endpoints:
    web:
      exposure:
        include: '*'
server:
  port: 83


spring:
  application:
    name: nacos-order-consumer
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848


#消费者将要去访问的微服务名称(注册成功进nacos的微服务提供者)
service-url:
  nacos-user-service: http://nacos-payment-provider

3、启动类

三个微服的启动类中需要加上注解:@EnableDiscoveryClient 进行服务发现

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;
    }
}

服务消费者中添加RestTemplate的config文件和业务 代码:

@Configuration
public class ApplicationContextConfig
{
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate()
    {
        return new RestTemplate();
    }
}
@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);
    }
}

5、启动测试

分别运行服务提供者和服务消费者服务,查看管理后台界面显示服务列表:
在这里插入图片描述
测试访问地址:http://localhost:83/consumer/payment/nacos/1
结果显示如下:
在这里插入图片描述
在这里插入图片描述
可以看到,服务消费者能够通过Nacos注册中心,成功访问到服务提供者提供的服务,并且采用的是轮询机制进行负载均衡。
可以查看maven依赖中,nacos是集成了Ribbon的:
在这里插入图片描述
此外,Nacos是支持CP和AP模式的切换的
在这里插入图片描述

Nacos作为配置中心实例

新建一个服务Client3377

1、pom依赖

<!--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>
        <! --监控器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

注意为了实现动态监测注册中心配置文件的变化,需要引入监控器

2、依赖

Nacos作为配置中心使用时,需要引入两个yml依赖文件,一个bootstrap.yml,另一个application.yml。
Nacos同springcloud config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取之后才能保证项目正常启动。springboot中配置文件的加载是存在优先级顺序的,bootstrap优先级高于application,所以我们在bootstrap配置文件中需要配置拉取配置中心配置文件的相关配置。

bootstrap配置文件

# 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格式的配置

application配置文件

spring:
  profiles:
    active: dev # 表示开发环境

3、启动类

添加@EnableDiscoveryClient 服务发现注解

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

4、业务类

注意需要添加@RefreshScope 注解来支持nacos的动态刷新功能

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

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

5、Nacos 后台服务中心配置

在后台配置中心系统中,需要配置公共的配置文件,文件的配置遵循一定的规则。

官网说明:
在这里插入图片描述
公式与配置管理中的 dataId字段内容的对应结果如下:
在这里插入图片描述
配置结果:
在这里插入图片描述
在这里插入图片描述

6、测试

运行微服务,调用接口查看结果信息:http://localhost:3377/config/info
在这里插入图片描述
我们更改配置文件中的 内容,再次刷新可以看到实现了动态 监测的效果:
在这里插入图片描述

多环境项目管理

Nacos提供了一套 配置管理方式,用来区分不同环境的文件管理——Namespace+group+data ID,三者范围由大到小。
Namespace是可以用于区分部署环境的,Group和DataID逻辑上区分两个目标对象。
在这里插入图片描述
在这里插入图片描述
这样我们在项目中就可以根据环境需求,配置相关的配置文件。
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值