nacos简易使用

71 阅读3分钟

学习大佬的文章,记录自己第一次使用nacos的全过程

  1. nacos是什么? 官方网站介绍如下

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

简单来讲,就是实现微服务架构中关系管理的服务注册中心,nacos的设计可以有效降低微服务间耦合性,动态的服务发现让微服务配置更简单高效。个人感受,微服务本身也是一种中心化的架构设计。

2.如何使用nacos

单机版nacos注册中心构建

  • 官网下载,链接为nacos.io/download/na… 因为是mac OS系统,所以选择下载了最新版本的.zip文件,解压后在/bin 目录下执行指令:startup.sh -m standalone 得到命令行输出如下:

image.png

在位置/logs/start.out位置阅读日志输出可以看到

image.png

因此通过http://172.30.33.98:8848/nacos/ 进行后台访问,可以看到界面如下:

image.png

此时单机版的Nacos注册中心完成搭建。

搭建简易服务

在IDEA 中基于spring-cloud搭建了一个微服务架构项目,其下的两个子项目,分别叫cloud-consumer和cloud-provider。cloud-consumer部分核心在controller 层,向cloud-provider发起HTTP请求。相关代码如下:

@RestController
@RequestMapping("userConsumers")
public class ConsumerController {

    private static final Logger logger = Logger.getLogger(ConsumerController.class.getName());

    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private DiscoveryClient discoveryClient;

    @GetMapping("info/{id}")
    public ResponseEntity<String> getUserInfo(@PathVariable("id") String id) {
        System.out.println("ConsumerController.getUserInfo");

        // 使用 Nacos 服务发现动态获取服务实例
        List<ServiceInstance> instances = discoveryClient.getInstances("cloud-provider");
        if (instances != null && !instances.isEmpty()) {
            // 获取第一个实例的 IP 和端口
            ServiceInstance instance = instances.get(0);
            String serviceUrl = "http://" + instance.getHost() + ":" + instance.getPort() + "/user/info/" + id;
            logger.info("Request URL: " + serviceUrl);

            // 发起请求
            return restTemplate.getForEntity(serviceUrl, String.class);
            //return restTemplate.getForEntity("http://cloud-provider/user/info/" + id, String.class);
        }
        return ResponseEntity.notFound().build();
    }
}

RestTemplate的配置为:

@Configuration
public class RestTemplateConfig {

    @Bean
    @LoadBalanced // 解析域名需要使用LoadBalancd注解
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

在当前的spring-boot版本下,该部分子项目需要使用/resource文件夹下bootstrap.yml作为配置文件,内容如下,需要重点关注和nacos相关的配置项。这是服务能在nacos等被成功注册的前置条件。

server:
  port: 8081

spring:
  application:
    name: cloud-consumer # 消费端服务名称
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848 # Nacos 服务地址
      config:
        server-addr: 127.0.0.1:8848
        namespace: public
        group: DEFAULT_GROUP            # 配置分组,默认为DEFAULT_GROUP
    rest:
      discovery:
        enabled: true  # 开启服务发现

cloud-provider服务只是简单提供一个字符串返回,其他内容和上个项目相似,这里贴一下启动的部分:

package org.example;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class ProviderServiceApplication {

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

运行上述两部分项目后,即可在nacos控制台即可成功查找到注册成功的两项服务:

image.png

而对cloud-consume发起http请求后,可以看到成功的返回:

image.png

以上就是最基础的nacos使用案例。