Springboot集成Nacos2「服务注册与发现」

199 阅读2分钟

在集成的过程中,由于刚入门Nacos,总是把项目依赖包的搞错,下面分别从springboot、springcloud两个例子人手。

一、springboot & Nacos

1. 引入POM依赖

        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>nacos-discovery-spring-boot-starter</artifactId>
            <version>0.2.10</version>
        </dependency>

2. 编写application.yml配置文件

server:
  port: 6002
  servlet:
    context-path: /springboot-nacos-discovery
spring:
  application:
    name: springboot-nacos-discovery
nacos:
  discovery:
    server-addr: localhost:8848
    namespace: 7e98b650-0c03-4663-b747-b3d4848630aa

3. 编写注册代码

@Configuration
public class NacosDiscovery {
    @Value("${server.port}")
    private int serverPort;

    @Value("${spring.application.name}")
    private String applicationName;

    @NacosInjected
    private NamingService namingService;
    
    @PostConstruct
    public void registerInstance() throws NacosException {
        namingService.registerInstance(applicationName,"127.0.0.1",serverPort);
    }
}

二、springcloud & Nacos

1. 引入POM依赖

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.1.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>

2. 编写application.yml 和 bootstrap.yml 配置文件

server:
  port: 6004
  servlet:
    context-path: /springcloud-nacos-discovery
spring:
  application:
    name: springcloud-nacos-discovery

bootstrap.yml

spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
        namespace: 7e98b650-0c03-4663-b747-b3d4848630aa
        group: DEFAULT_GROUP

3. 通过注解@EnableDiscoveryClient注入服务

@SpringBootApplication
@EnableDiscoveryClient
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
        System.out.println("        ヾ(◍°∇°◍)ノ゙    Application启动成功      ヾ(◍°∇°◍)ノ゙\n" +
                "                    _\n" +
                "            "
                + "      _(_)_                           wWWWw   _\n" +
                "      @@@@       (_)@(_)   vVVVv     _     @@@@  (___) _(_)_\n" +
                "     @@()@@ wWWWw  (_)\    (___)   _(_)_  @@()@@   Y  (_)@(_)\n" +
                "      @@@@  (___)     `|/    Y    (_)@(_)  @@@@   \|/   (_)\\n" +
                "       /      Y       \|    \|/    /(_)    \|      |/      |\n" +
                "    \ |     \ |/       | / \ | /  \|/       |/    \|      \|/\n" +
                "    \\|//   \\|///  \\\|//\\\|/// \|///  \\\|//  \\|//  \\\|// \n" +
                "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
    }
}

四、服务消费测试

服务消费方式,参考 blog.csdn.net/NoviceZ/art…

Nacos服务消费,有多种方式,下面采用RestTemplate+@LoadBalanced方式举栗子测试。

新建 springcloud-nacos-discovery-client 工程

项目结构与上面工程一样,只是修改 application.yml 配置内容

server:
  port: 6005
  servlet:
    context-path: /springcloud-nacos-discovery-client
spring:
  application:
    name: springcloud-nacos-discovery-client

编写测试接口

@RestController
public class ConsumerController {
    
    @Autowired
    private LoadBalancerClient loadBalancerClient;

    @GetMapping("/test")
    public String test(String name) {
        // 通过spring cloud common中的负载均衡接口选取服务提供节点实现接口调用
        ServiceInstance serviceInstance = loadBalancerClient.choose("springcloud-nacos-discovery");
        String url = serviceInstance.getUri() + "/springcloud-nacos-discovery/producer?name=" + name;
        RestTemplate restTemplate = new RestTemplate();
        String result = restTemplate.getForObject(url, String.class);
        return "Invoke : " + url + ", return : " + result;
    }
}

启动 springcloud-nacos-discovery(生产服务) / springcloud-nacos-discovery-client(消费服务)

测试结果

Invoke : http://192.168.3.16:6004/springcloud-nacos-discovery/producer?name=123, return : RequestParam: 123

官方参考demo:Nacos Spring Cloud 快速开始

springboot/springcloud 集成 Nacos demo:springboot-nacos gitee