Spring Boot 开启 Nacos 服务发现

本章将通过在 Spring Boot 中集成 Nacos,并且开启服务发现功能。

准备工作

使用 IDEA 创建一个 Spring Boot 项目(Maven),项目结构如下图:

Spring Boot 开启 Nacos 服务发现

版本信息:

  • Spring Boot 2.2.6.RELEASE

  • JDK 1.8 64bit

  • Nacos 2.2.3

  • nacos-discovery-spring-boot-starter 0.2.7

注意:在开始运行项目前,请先启动 Nacos 服务(如何启动 Nacos 请参考 “Nacos 快速开始” 章节)。

项目依赖

在项目 pom.xml 中添加 Nacos 依赖,完整 pom.xml 如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.hxstrive.nacos</groupId>
    <artifactId>nacos_spring_boot_discovery</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>nacos_spring_boot_discovery</name>
    <description>nacos_spring_boot_discovery</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <!-- 看这里 -->
        <!-- https://mvnrepository.com/artifact/com.alibaba.boot/nacos-discovery-spring-boot-starter -->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>nacos-discovery-spring-boot-starter</artifactId>
            <version>0.2.7</version>
        </dependency>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

项目代码

项目入口类

在项目入口类,很普通,仅仅添加了 @SpringBootApplication 注解。代码如下:

package com.hxstrive.nacos;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class NacosSpringBootDiscoveryApplication {

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

}

控制器类

创建一个控制器 DiscoveryController 类,使用 @NacosInjected 注解注入 Nacos 的 NamingService 实例。代码如下:

package com.hxstrive.nacos;

import com.alibaba.nacos.api.annotation.NacosInjected;
import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.api.naming.NamingService;
import com.alibaba.nacos.api.naming.pojo.Instance;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
import static org.springframework.web.bind.annotation.RequestMethod.GET;

/**
* 控制器
* @author hxstrive.com
*/
@Controller
@RequestMapping("discovery")
public class DiscoveryController {

   @NacosInjected
   private NamingService namingService;

   @RequestMapping(value = "/get", method = GET)
   @ResponseBody
   public List<Instance> get(@RequestParam String serviceName) throws NacosException {
       return namingService.getAllInstances(serviceName);
   }
}

项目配置

打开 resource/application.properties 属性配置文件,添加 nacos.discovery.server-addr 配置,指定 Nacos 服务地址,配置如下:

# 配置 Nacos 为本地服务
nacos.discovery.server-addr=127.0.0.1:8848

启动项目

启动项目,启动成功后,调用 Nacos 服务接口注册服务,如下:

  • 方式一:使用 CURL 发起请求,如:curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080'。

  • 方式二:使用 ApiFox 类似的工具发起 POST 请求(参考 “Nacos Open API”)。

此时,打开 Nacos 查看服务列表信息,如下图:

Spring Boot 开启 Nacos 服务发现

最后,通过浏览器访问 http://localhost:8080/discovery/get?serviceName=nacos.naming.serviceName 地址,获取名称为 nacos.naming.serviceName 服务的信息,如下图:

Spring Boot 开启 Nacos 服务发现

说说我的看法
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号