二、Spring Cloud Alibaba-Nacos-服务注册与发现

一、概述

服务注册中心: 存储服务实例和服务负载均衡策略的数据库

       本文通过案例来演示Nacos服务注册与发现功能如何在Spring Cloud项目中的使用流程,下图为本文案例主要流程示意图:
流程示意图

二、服务提供者(nacos-provider)

服务提供方: 是指提供可复用和可调用服务的应用方

2.1、新建一个Spring Boot项目,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.1.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.zhoumo</groupId>
    <artifactId>nacos-provider</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <properties>
        <java.version>1.8</java.version>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

        <spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
        <spring-cloud-alibaba.verion>0.9.0.RELEASE</spring-cloud-alibaba.verion>
    </properties>

    <dependencyManagement>
        <dependencies>
            <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>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.verion}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>


    <dependencies>
        <!-- Spring Boot Start -->
        <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>
        </dependency>
        <!-- Spring Boot End -->

        <!-- Nacos Start -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!-- Nacos End -->
    </dependencies>

</project>

2.2、配置文件内容如下(application.yml):

server:
  port: 8070

spring:
  # 配置服务名称
  application:
    name: service-provider
  # 配置 Nacos Server的地址
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.145.129:8848

2.3、启动类内容如下(Application):

        通过注解 @EnableDiscoveryClient开启Nacos的服务注册与发现功能:

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

@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderApplication {

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

}

2.4、前端控制器内容如下(Controller):

        编写一个 RestController 提供 RESTFul API 用于测试:

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/provider")
public class ProviderController {

    @RequestMapping("/hello")
    public String Hello(){
        return "Hello, This is Nacos provider!";
    }
}

2.5、启动项目验证是否注册成功:

        通过浏览器访问Nacos Server:http://192.168.145.129:8848/nacos;然后点击服务列表,即可查看到该服务已注册到Nacos Server上:
在这里插入图片描述

2.6、浏览器访问测试接口:

在这里插入图片描述

三、服务消费者(nacos-consumer)

服务消费方: 是指会发起对某个服务调用的应用方

        由于是Spring Boot项目,所以此处在消费者端使用RestTemplate来对服务提供者进行调用。

3.1、新建一个Spring Boot项目,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.1.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.zhoumo</groupId>
    <artifactId>nacos-consumer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <properties>
        <java.version>1.8</java.version>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

        <spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
        <spring-cloud-alibaba.verion>0.9.0.RELEASE</spring-cloud-alibaba.verion>
    </properties>

    <dependencyManagement>
        <dependencies>
            <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>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.verion}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>


    <dependencies>
        <!-- Spring Boot Start -->
        <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>
        </dependency>
        <!-- Spring Boot End -->

        <!-- Nacos Start -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!-- Nacos End -->
    </dependencies>

</project>

3.2、配置文件内容如下(application.yml):

server:
  port: 8071

spring:
  # 配置服务名称
  application:
    name: service-consumer
  # 配置 Nacos Server的地址
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.145.129:8848

3.3、启动类内容如下(Application):

        通过注解 @EnableDiscoveryClient开启Nacos的服务注册与发现功能:

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

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApplication {

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

3.4、配置类内容如下(Configuration):

RestTemplate是 Spring 提供的用于访问 Rest 服务的客户端,它简化了与HTTP服务的通信方式,统一了 RESTful 的标准,封装了HTTP链接,只需传入url及返回值类型即可。相较于之前常用的HttpClient,RestTemplate是一种更优雅的调用RESTful服务的方式。

        在配置类中注入RestTemplate,即可在项目中使用:

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RestTemplateConfigure {

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

}

3.5、前端控制器内容如下(Controller):

        在Controller中,通过RestTemplate去访问服务提供者,并使用服务提供者在 Nacos Server 中注册的服务名进行访问,即可测试消费者能否以服务名通过 Nacos Server 发现服务提供者。

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

@RestController
@RequestMapping("/consumer")
public class ConsumerController {

    private final RestTemplate restTemplate;

    @Autowired
    public ConsumerController(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    @RequestMapping("/hello")
    public String Hello(){
        // 使用服务名称调用服务提供者
        return restTemplate.getForObject("http://service-provider/provider/hello", String.class);
    }
}

3.6、启动项目验证是否注册成功:

        通过浏览器访问Nacos Server:http://192.168.145.129:8848/nacos;然后点击服务列表,即可查看到该服务已注册到Nacos Server上:
在这里插入图片描述

3.7、浏览器访问测试接口:

在这里插入图片描述

四、总结

        本文通过编写服务提供者(provider)和服务消费者(consumer)模块,并将其注册到 Nacos Server 服务上,最后在服务消费者(consumer)中使用RestTemplate去调用服务提供者(provider)这一流程案例,来更好的理解Nacos的注册与发现功能,以及在项目中的使用。


发布了47 篇原创文章 · 获赞 16 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/zorro_jin/article/details/105197250