简介

随着Eureka宣告闭源,更多人开始转向Zookeeper和Nacos。Nacos不仅有着优秀
的注册中心,还拥有远程配置和服务总线的的功能,当前的功能已经远超Eureka,
后续发展不可估量。

快速开始

首先创建一个springboot项目,不需要引入依赖,删除src目录,修改pom文件。

  • 导入的依赖其实只需要nacos-discovery和spring-web就行了,这个demo里没有用到远程配置,所以nacos-config不需要

  • 因为要使用模块化开发,所以这个大的项目需要作为pom依赖,需要配置

<packaging>pom</packaging>
  • 然后在确定子项目的版本,需要有properties和dependencyManagement来进行版本控制

  • 之后因为需要创建多个模块,所以把需要创建的模块进行引入modules。

<?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.3.5.RELEASE</version>
        <relativePath/>
    </parent>

    <groupId>org.jgs2007</groupId>
    <artifactId>sc-nacos-study</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>sc-nacos-study</name>
    <description>Demo project for Spring Boot</description>
    <packaging>pom</packaging>

    <modules>
        <module>user-consumer</module>
        <module>user-provider</module>
        <module>user-provider-2</module>
        <module>common</module>
    </modules>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR9</spring-cloud.version>
        <spring-cloud-alibaba.version>2.2.3.RELEASE</spring-cloud-alibaba.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>

    <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>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>
</project>

创建子模块

user-provider

  • 首先修改pom文件,将父项目的坐标引入,换成这样。
	<parent>
		<groupId>org.jgs2007</groupId>
		<artifactId>sc-nacos-study</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
  • 在运行类上添加注解@EnableDiscoveryClient
  • 更改配置文件格式为yml,添加nacos设置。设置该模块的端口号,名称和nacos地址。
server:
  port: 7071
spring:
  application:
    name: user-provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
  • 编写控制类方法,严格遵守restful接口开发规范
package org.jgs2007.scnacosstudy.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * @author sun
 * @Title:
 * @Description:
 * @date 2020-11-1720:32
 */
@RestController
@RequestMapping("user")
public class UserController {
    @GetMapping
    public String list(){
        return "123";
    }
}

user-provider-2

  • 因为是集群,所以配置基本一致,只需要更改端口号即可,7072,为了结果展示明显,控制器返回的字符串改为“456”.

user-consumer

  • 操作也基本相同,但是注意几点。
    1. 主运行类上添加两个注解:
      @EnableDiscoveryClient
      @EnableFeignClients
    1. 端口号改为8081,服务名称改为user-consumer
    1. 控制器编写需要引入feignClient类,这是下一个模块的。
package org.jgs2007.scnacosstudy.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * @author sun
 * @Title:
 * @Description:
 * @date 2020-11-1720:32
 */
@RestController
@RequestMapping("user")
public class UserController {
    @Autowired
    protected UserProviderClient userProviderClient;
    @RequestMapping("list")
    public String list(){
        return userProviderClient.list();
    }
}

common

common模块作为连接消费者和提供者的介质,所以配置有点不一样,只需要配置pom文件和编写控制器代码就行

  • 修改pom文件,引入OpenFeign依赖
<?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.jgs2007</groupId>
		<artifactId>sc-nacos-study</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>

	<artifactId>common</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>common</name>
	<description>Demo project for Spring Boot</description>

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

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-openfeign</artifactId>
		</dependency>
	</dependencies>
</project>
  • 编写代码,需要匹配provider模块的写法,返回类型必须保持一致。
package org.jgs2007.scnacosstudy.controller;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
/**
 * @author sun
 * @Title:
 * @Description:
 * @date 2020-11-1720:46
 */
@FeignClient(value = "user-provider", path = "user")
public interface UserProviderClient {

    @GetMapping
    String list();
}

启动nacos

  • 下载并解压好nacos文件,进入到bin目录下运行cmd指令。弹出窗口后输入startup.cmd -m standalone,启动nacos。
  • 然后启动所有服务,启动成功会显示已完成的服务。

image.png

  • 最后运行localhost:8081/user/list,运行成功会显示。
    image.png
  • 再次运行
    image.png

nacos注册服务和轮询功能完成。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐