【Spring Cloud Alibaba】nacos注册中心实践

一、nacos下载

直接输入nacos.io,然后在官网点击版本号
在这里插入图片描述
点击Tags选择版本下载
在这里插入图片描述
在这里插入图片描述

二、nacos安装

解压后的目录结构:
在这里插入图片描述
显然bin里面就是一些执行程序,conf中就是一些配置文件。因为nacos运行时需要数据库来记录用户、权限、角色等信息的。因此在conf中nacos已经为我们写好了需要的库和表。那就先建立库表,看看conf中的文件:
在这里插入图片描述
很显然,application.properties就是程序的启动配置文件,显然我们有理由相信,nacos其实就是一个springboot形式的程序。因此我们可能好奇启动的jar在哪里。其实就在target目录中
在这里插入图片描述
言归正传,接下来我们创建nacos需要的库表,显然在conf目录中,nacos-mysql.sql就是nacos为我们提供好的mysql库的建表语句。我们直接在我们的库里执行就好,结果如下
在这里插入图片描述
到了这里当然还不能直接启动nacos,既然建了表,那么就需要mysql的连接信息。因此修改config目录下的application.properties文件的数据库连接信息。
在这里插入图片描述

下面就是启动的时候,由于我们这里的nacos是单机模式并非集群,因此我们再启动的时候需要加个参数 ./startup.sh -m standalone,然后我们查看logs目录下的nacos.log,判断是否启动成功
在这里插入图片描述
然后直接访问IP+8848+/nacos可以看到管理界面
在这里插入图片描述
默认用户名密码:nacos/nacos
在这里插入图片描述

三、创建项目

项目规划为一个父项目,管理依赖,两个子项目实现我们的实例
在这里插入图片描述
spring-cloud-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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>lwb-project</artifactId>
        <groupId>com.lwb</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>spring-cloud-nacos</artifactId>
    <packaging>pom</packaging>
    <version>1.0.0-SNAPSHOT</version>
    <modules>
        <module>nacos-provider</module>
        <module>nacos-consumer</module>
    </modules>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <parent>
        <!--版本判断 https://start.spring.io/actuator/info-->
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.2.RELEASE</version>
    </parent>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR12</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.5.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>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>

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

</project>

因为在父项目中,已经引入了本次试验所需的全部依赖,因此在两个子项目中,不用在写依赖配置了nacos-provider的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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>spring-cloud-nacos</artifactId>
        <groupId>com.lwb</groupId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>nacos-provider</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
</project>

nacos-consumer的配置类似

1、服务端编写

nacos-provider作为服务提供者,内容结构如下:
在这里插入图片描述
主启动类NacosProviderApplication的编写内容如下:

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

/**
 * @author 隐市高手
 * @date 2022/4/24 22:55
 */

@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderApplication {

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

EchoController的编写内容如下:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author 隐市高手
 * @date 2022/4/24 23:58
 */
@RestController
public class EchoController {

    @Value("${server.port}")
    private Integer port;

    @GetMapping(value = "/echo/port")
    public String echo() {
        return "Hello Nacos Discovery " + port;
    }
}

配置文件application.yml的配置内容如下:

spring:
  application:
    name: nacos-provider
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.101.41:8848

application-provider8081.yml配置内容如下:

server:
  port: 8081

application-provider8082.yml配置内容如下:

server:
  port: 8082

2、解释下配置文件

熟悉springboot的都知道,springboot在启动的时候,可以指定启动按照那个配置文件来启动。
而在项目拥有默认配置文件application.properties的时候,这个配置文件依然生效,只是会用你指定的配置文件去覆盖默认的配置文件。当然,指定的配置文件中没有的配置项,就只能按照默认的配置内容来生效了。
因此在启动时候,我只需要指定不同的配置文件,就可以将两个相同的服务,不同的端口注册到nacos中。
由于在按照不同的端口(指定不同的配置文件)启动的时候,两次启动的服务名spring.application.name是相同的,都叫nacos-provider。因此nacos自然的将这两个服务作为同一个服务的两个节点。
这里不用多说也知道192.168.101.41:8848是我们要注册的nacos地址吧。

3、启动服务

上面写好了,服务那么就启动吧。这里说下,由于这是同一份代码,我们需要将idea设置为允许多次启动。
在这里插入图片描述
启动时指定配置文件为provider8082,那么启动的服务监听8082端口。再次启动的时候配置为provider8081,启动的服务监听的端口是8081。这样就在一份代码的情况下启动了两个服务,且注册到nacos中
启动结果如下:
在这里插入图片描述
看看nacos中是否注册了我们的服务:
在这里插入图片描述
再点击详情进入看看:
在这里插入图片描述
至此服务注册到nacos中成功

四、客户端编写

客户端nacos-consumer也建立在父项目spring-cloud-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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>spring-cloud-nacos</artifactId>
        <groupId>com.lwb</groupId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>nacos-consumer</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

</project>

项目结构如下:
在这里插入图片描述
application-consumer9081.yml配置文件编写:

server:
  port: 9081

spring:
  application:
    name: nacos-consumer
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.101.41:8848

provider.server.url: http://nacos-provider

NacosConfig编写如下:

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;

/**
 * @author 隐市高手
 * @date 2022/4/25 0:28
 */
@Configuration
public class NacosConfig {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

这里一定要一个@LoadBalanced注解,由于上面我们的服务端注册了两个节点到nacos中。这里自然是要搞一个负载均衡的。由于在导入spring-cloud-starter-alibaba-nacos-discovery依赖的时候自动导入了ribbon,因此天然支持了负载均衡。所以不加@LoadBalanced注解,客户端不知道改以什么方式来访问两个节点,要报错。
EchoController编写:

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

/**
 * @author 隐市高手
 * @date 2022/4/24 23:58
 */
@RestController
public class EchoController {

    @Value("${provider.server.url}")
    private String providerServerUrl;
    @Autowired
    private RestTemplate restTemplate;

    @GetMapping(value = "/echo/port")
    public String echo() {
        return restTemplate.getForObject(providerServerUrl + "/echo/port", String.class);
    }
}

NacosConsumerApplication主应用程序编写:

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

/**
 * @author 隐市高手
 * @date 2022/4/24 22:55
 */

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApplication {

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

然后启动:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

访问客户端接口 http://localhost:9081/echo/port 看看能不能轮次获取到输出8081/8082
在这里插入图片描述
在这里插入图片描述
一直点击刷新,可以看到8081和8082轮次显示

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值