原创

Spring Cloud 从入门到精通(三)集成 Nacos 构建微服务实现服务发现

阿里巴巴开源 Nacos 定位是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 支持的功能包括服务发现,集成配置中心,和服务数据管理。
本文主要基于“Spring Cloud 从入门到精通(二)集成 Nacos 框架实现服务注册”章节已经实现了服务注册到注册中心,本文主要说一说 Spring Cloud Alibaba 集成 Nacos 框架构建微服务实现服务发现。

服务发现是指消费者从Nacos server注册中心上获取生产者调用的地址(集合),在使用负载均衡的策略获取集群中某个地址实现本地RPC远程调用。

创建Maven项目

新建discovery-nacos-consumer-demo02命名的项目。Maven项目搭建完后,其整体目录结构如下图所示:
新建pom.xml文件

在pom.xml文件中增加依赖jar包配置信息,具体参考如下:

<?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 http://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.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.lidong</groupId>
    <artifactId>discovery-nacos-consumer-demo02</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>discovery-nacos-consumer-demo02</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud-alibaba.version>2.2.0.RELEASE</spring-cloud-alibaba.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>${spring-cloud-alibaba.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <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>

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

    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
        </repository>
    </repositories>

</project>

注:对于引入依赖的jar包简单说明一下,本案例使用的是Spring Boot 2.2.5.RELEASE版本和Spring Cloud Alibaba 2.2.0.RELEASE版本,与上一章节服务注册所使用的jar包一定要保持版本一致,否则版本之间的兼容性问题导致启动项目时报错。

1)健康检查依赖于此包

spring-boot-starter-actuator

2)Spring Cloud nacos 的服务发现支持

spring-cloud-starter-alibaba-nacos-discovery

配置数据源源

在application.yml文件中添加配置信息如下:

server:
  port: 9002 #提供者的端口
spring:
  application:
    name: discovery-nacos-consumer
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
配置参数说明
server.port:9001 服务提供者的端口
spring.application.name 是指注册到nacos server的名称,服务发现会根据这个名称来进行服务调用。

spring.application.cloud.nacos.discovery.server-addr: 127.0.0.1:8848 nacos地址和端口号默认是127.0.0.1:8848,若果没有配置hosts参数其默认的地址是localhost,nacos服务会占用8848端口。

新建服务发现类文件

新建HelloWorldController类文件,调用注册中心接口服务,返回调用结果,具体代码如下:

package com.yoodb.study.nacos.demo02;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class HelloWorldController {

    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping("/consumer/{id}")
    public Object consumer(@PathVariable("id")Integer id) {
        return restTemplate.getForObject("http://discovery-nacos-provider/provider/" + id, Object.class);
    }
}

添加启动类

新建SCNSDemo02Application类文件,具体代码如下:

package com.yoodb.study.nacos.demo02;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

/**
 * 服务发现
 */
@EnableDiscoveryClient
@SpringBootApplication
public class SCNSDemo02Application {

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

    @LoadBalanced
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

}

@EnableDiscoveryClient 注解是指开启服务发现支持,让注册中心能够发现,扫描到该服务。

启动项目

先启动Nacos server服务,然后启动服务注册discovery-nacos-provider-demo01项目(参考上一章节),最后启动服务发现discovery-nacos-consumer-demo02项目,成功输出日志参考如下:

2020-03-27 12:29:31.283  INFO 1840 --- [           main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 2 endpoint(s) beneath base path '/actuator'
2020-03-27 12:29:31.439  INFO 1840 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 9002 (http) with context path ''
2020-03-27 12:29:31.674  INFO 1840 --- [           main] c.a.c.n.registry.NacosServiceRegistry    : nacos registry, DEFAULT_GROUP discovery-nacos-consumer 192.168.101.196:9002 register finished
2020-03-27 12:29:33.748  INFO 1840 --- [           main] c.y.s.n.demo02.SCNSDemo02Application     : Started SCNSDemo02Application in 13.827 seconds (JVM running for 15.745)
2020-03-27 12:29:36.614  INFO 1840 --- [192.168.101.196] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-03-27 12:29:36.615  INFO 1840 --- [192.168.101.196] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2020-03-27 12:29:36.622  INFO 1840 --- [192.168.101.196] o.s.web.servlet.DispatcherServlet        : Completed initialization in 7 ms

服务消费者发布成功。

请求地址:

http://localhost:9002/consumer/1
查看接口返回结果:
{"id":1,"name":"关注微信公众号“Java精选”,Spring Cloud系列文章持续更新中,带你从入门到精通,玩转Spring Cloud框架。"}

访问Nacos server地址,该服务是在“Spring Cloud 从入门到精通(一)Nacos 服务中心初探”章节讲过,大家可以点击链接跳转查看:

http://192.168.101.196:8848/nacos/index.html
在控制台会发现服务列表中有一个名为discovery-nacos-provider的服务,参考如图所示:
点击详情会发现服务的详细信息,参考如图所示:
项目源码

本文篇文章的项目源码(discovery-nacos-consumer-demo02)地址:

https://github.com/yoodb/springcloud

至此,关于Spring Cloud 集成 Nacos 框架实现服务发现配置完毕,后续Spring Cloud系列文章持续更新中。下面朋友们可以试一试搭建项目,有什么疑问欢迎下方留言。

~阅读全文~人机检测~

关注下方微信公众号“Java精选”(w_z90110),回复关键词领取资料:如Mysql、Hadoop、Dubbo、Spring Boot等,免费领取视频教程、资料文档和项目源码。

Java精选专注程序员推送一些Java开发知识,包括基础知识、各大流行框架(Mybatis、Spring、Spring Boot等)、大数据技术(Storm、Hadoop、MapReduce、Spark等)、数据库(Mysql、Oracle、NoSQL等)、算法与数据结构、面试专题、面试技巧经验、职业规划以及优质开源项目等。其中一部分由小编总结整理,另一部分来源于网络上优质资源,希望对大家的学习和工作有所帮助。

评论

分享:

支付宝

微信