Spring Cloud注册中心 Nacos 入门

qshy
发布于 2022-4-25 22:26
浏览
0收藏

作者 | springboot葵花宝典
来源 | 今日头条

今天我们介绍通过使用Spring Cloud Alibaba提供的Spring Cloud Alibaba Nacos Discovery 组件,基于SpringCloud编码接入Nacos作为注册中心,实现服务的注册和发现

Docker单节点安装Nacos

下载nacos镜像

在https://hub.docker.com/查找需要下载的docker镜像版本

docker pull nacos/nacos-server:1.4.1 // 下载指定版本
docker pull nacos/nacos-server // 下载最新版

Spring Cloud注册中心 Nacos 入门-鸿蒙开发者社区

 docker启动nacos,需要配置数据库等信息IP地址不可以是localhost或者127.0.0.1

docker run -d \
-e PREFER_HOST_MODE=ip \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=192.168.154.125 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=root \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e JVM_XMS=500m \
-e JVM_XMX=500m \
-e JVM_XMN=400m \
-p 8848:8848 \
--name nacos \
nacos/nacos-server

3访问Nacos的UI界面 Nacos服务,内置UI前端界面,使用浏览器,输入http://192.168.154.125/nacos 使用默认的用户nacos/nacos进行登录。注:在生产环境记得修改密码 登录成功界面如下:

注册中心简介

注册中心是微服务构架的通信录,记录服务和服务地址的映射关系。在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就到这里找到服务的地址,进行调用。注册中心一般有三种角色,他们之间相互交互,图如下:Spring Cloud注册中心 Nacos 入门-鸿蒙开发者社区

  • Service Provider:服务提供者(或Servr)。启动时将自己的IP等信息注册到注册中心
  • Service Consumer:服务消费者(或Client)。从注册中心获取提供者的信息
  • Registy:注册中心

代码实现

我们介绍,如何搭建Nacos Discovery组件的入门示例,具体步骤如下:

1.搭建一个nacos-provider(作为服务提供者),注册到Nacos中

2.搭建一个nacos-consumer(作为服务消费者),从nacos获取nacos-provider服务实例列表,选择其中一个实例,进行远程调用。

 搭建nacos-provider(服务提供者)

创建nacos-labe1-provider项目,作为服务提供者

 为nacos-provider引入项目依赖

在项目的pom.xml文件中,引入 Spring Cloud Nacos Discovery 相关依赖。配置如下:

 <properties>
       <spring.boot.version>2.3.2.RELEASE</spring.boot.version>
       <spring.cloud.version>Hoxton.SR8</spring.cloud.version>
       <spring.cloud.alibaba.version>2.2.5.RELEASE</spring.cloud.alibaba.version>
   </properties>
   <!--
       引入 Spring Boot、Spring Cloud、Spring Cloud Alibaba 三者 BOM 文件,进行依赖版本的管理,防止不兼容。
       在 https://dwz.cn/mcLIfNKt 文章中,Spring Cloud Alibaba 开发团队推荐了三者的依赖关系
    -->
   <dependencyManagement>
       <dependencies>
           <dependency>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-starter-parent</artifactId>
               <version>${spring.boot.version}</version>
               <type>pom</type>
               <scope>import</scope>
           </dependency>
           <dependency>
               <groupId>org.springframework.cloud</groupId>
               <artifactId>spring-cloud-dependencies</artifactId>
               <version>${spring.cloud.version}</version>
               <type>pom</type>
               <scope>import</scope>
           </dependency>
           <dependency>
               <groupId>com.alibaba.cloud</groupId>
               <artifactId>spring-cloud-alibaba-dependencies</artifactId>
               <version>${spring.cloud.alibaba.version}</version>
               <type>pom</type>
               <scope>import</scope>
           </dependency>
       </dependencies>
   </dependencyManagement>
   <dependencies>
       <!-- 引入 SpringMVC 相关依赖,并实现对其的自动配置 -->
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-web</artifactId>
       </dependency>
       <!-- 引入 Spring Cloud Alibaba Nacos Discovery 相关依赖,将 Nacos 作为注册中心,并实现对其的自动配置 -->
       <dependency>
           <groupId>com.alibaba.cloud</groupId>
           <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
       </dependency>
   </dependencies>

我们分别引入了Spring Boot、Spring Cloud、Spring Cloud Alibaba 三者 BOM 文件,进行依赖版本的管理,防止不兼容。在《Spring Cloud 官方文档 —— 版本说明》文档中,推荐了三者的依赖关系。如下表格:

Cloud VersionCloud Alibaba VersionBoot VersionHoxton.SR82.2.5.RELEASE2.3.2.RELEASEGreenwich.SR62.1.3.RELEASE2.1.13.RELEASEHoxton.SR32.2.1.RELEASE2.2.5.RELEASEHoxton.RELEASE2.2.0.RELEASE2.2.X.RELEASEGreenwich2.1.2.RELEASE2.1.X.RELEASEFinchley2.0.3.RELEASE2.0.X.RELEASEEdgware1.5.1.RELEASE(停止维护,建议升级)1.5.X.RELEASE

我们选择了 Spring Boot 版本为 2.3.2.RELEASE引入 spring-cloud-starter-alibaba-nacos-discovery 依赖,将 Nacos 作为注册中心,并实现对它的自动配置。

 nacos-provider的配置文件

创建nacos-provider的application.yml的配置文件,添加 Nacos Discovery 配置项。配置如下:

spring:
  application:
    name: nacos-provider # Spring 应用名
  cloud:
    nacos:
      # Nacos 作为注册中心的配置项,对应 NacosDiscoveryProperties 配置类
      discovery:
        server-addr: 192.168.154.125:8848 # Nacos 服务器地址
        service: ${spring.application.name} # 注册到 Nacos 的服务名。默认值为 ${spring.application.name}。
server:
  port: 9900 # 服务器端口。默认为 8080

 启动类添加配置以及测试

NacosLab1ProviderApplication启动项上添加 @EnableDiscoveryClient 注解

创建ProviderController类用于提供服务

@RestController
public class ProviderController {
    private Logger LOGGER = LoggerFactory.getLogger(this.getClass());
    @GetMapping("hello")
    public String sayhello(String consumer){
        LOGGER.info("操作成功");
        return "provider  hello:" + consumer;
    }
}

运行EurekaProviderApplication后,打开Nacos 控制台,可以在服务列表看到服务 nacos-provider。如下图:Spring Cloud注册中心 Nacos 入门-鸿蒙开发者社区

 搭建nacos-consumer(服务消费者)

创建nacos-labe1-consumer项目,作为服务消费者,项目代码和服务提供者是基本一致的。

为nacos-consumer引入项目依赖

和nacos-provider的依赖基本一致

 nacos-consumer的配置文件

创建nacos-provider的application.yml的配置文件,添加 Nacos Discovery 配置项。配置如下:

spring:
  application:
    name: nacos-consumer # Spring 应用名
  cloud:
    nacos:
      # Nacos 作为注册中心的配置项,对应 NacosDiscoveryProperties 配置类
      discovery:
        server-addr: 192.168.154:8848 # Nacos 服务器地址
server:
  port: 9800 # 服务器端口。默认为 8080

 启动类添加配置以及添加消费类

  • 在NacosLab1ConsumerApplication添加@EnableDiscoveryClient配置
  • 创建ConsumerRestTemplateConfiguration配置类
@Configuration
public class ConsumerRestTemplateConfiguration {
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

添加控制器

@RestController
public class ConsumerControlle {
    @Autowired
    private DiscoveryClient discoveryClient;
    @Autowired
    private RestTemplate restTemplate;
    @Autowired
    private LoadBalancerClient loadBalancerClient;
    @GetMapping("/hello")
    public String hello(String name) {
        // <1> 获得服务 `eureka-provider` 的一个实例
        ServiceInstance instance;
        if (true) {
            // 获取服务 `demo-provider` 对应的实例列表
            List<ServiceInstance> clientInstances = discoveryClient.getInstances("nacos-provider");
            // 选择第一个
            instance = clientInstances.size() > 0 ? clientInstances.get(0) : null;
        } else {
            instance = loadBalancerClient.choose("nacos-provider");
        }
        // <2> 发起调用
        if (instance == null) {
            throw new IllegalStateException("获取不到实例");
        }
        String targetUrl = instance.getUri() + "/hello?consumer=" + name;
        String response = restTemplate.getForObject(targetUrl, String.class);
        // 返回结果
        return "consumer:" + response;
    }
}

测试

运行eureka-consumer后,打开Eureka运维界面,结果如图所示:Spring Cloud注册中心 Nacos 入门-鸿蒙开发者社区

访问服务消费者http://127.0.0.1:9800/hello?name=consumer1,返回结果为:"consumer:provider hello:consumer1"。表示远程调用服务提供者成功

总结

今天主要讲解了Nacos注册中心、Nacos Client(消费者和服务者创建)的搭建过程

收藏
回复
举报
回复
    相关推荐