Nacos入门尝鲜-如何在SpringCloud项目中使用注册中心和负载均衡

系列文章目录

第一章 Nacos入门尝鲜-下载安装



前言

上一篇演示了如何在本地的Windows环境中安装运行Nacos,可以看一下系列文章。


一、服务注册和负载均衡

1、搭建父工程

在这里插入图片描述
先搭建起nacos-test父工程,pom文件如下,使用到的是springCloud Hoxton.SR1版,和alibaba 2.1.0.RELEASE的版本,之前按照文档查了一下版本依赖但是结果报错,就只有降低版本了结果就没问题了。
在这里插入图片描述

<?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>
    <packaging>pom</packaging>
    <modules>
        <module>nacos-provide</module>
        <module>nacos-consumer</module>
    </modules>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.taikangsc</groupId>
    <artifactId>nacos-test</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>nacos-test</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring.cloud.version>Hoxton.SR1</spring.cloud.version>
        <spring.cloud.alibaba.version>2.1.0.RELEASE</spring.cloud.alibaba.version>
    </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>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>

    <dependencies>
        <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>
        <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>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-test</artifactId>
            <version>2.3.1.RELEASE</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

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

2、搭建9001端口上的nacos-provide子工程

在这里插入图片描述

1、导入pom文件

POM文件中如下,导入discovery和config的starter,discovery用于服务的发现,config用于服务配置

<?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>nacos-test</artifactId>
        <groupId>com.taikangsc</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>nacos-provide</artifactId>
    <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-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>

</project>

2、application.yml

#端口
server:
  port: 9001
#nacos注册中心地址
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
management:
  endpoints:
    web:
      exposure:
        include: "*"
#用于测试nacos的config动态实时更新配置
app:
  name: zhangsan

3、新建bootstrap.yml

spring:
  application:
    name: nacos-producer
  profiles:
    active: dev
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml
        namespace: public

bootstrap与application
1.加载顺序
这里主要是说明application和bootstrap的加载顺序。

bootstrap.yml(bootstrap.properties)先加载
application.yml(application.properties)后加载
bootstrap.yml 用于应用程序上下文的引导阶段。

bootstrap.yml 由父Spring ApplicationContext加载。

父ApplicationContext 被加载到使用 application.yml 的之前。

2.配置区别
bootstrap.yml 和application.yml 都可以用来配置参数。

bootstrap.yml 可以理解成系统级别的一些参数配置,这些参数一般是不会变动的。
application.yml 可以用来定义应用级别的,如果搭配 spring-cloud-config 使用 application.yml 里面定义的文件可以实现动态替换。

3、NacosProvideApplication.java

要想服务被被发现,就得在启动类上加上@EnableDiscoveryClient

/**
 * @author Administrator
 */
@SpringBootApplication
@EnableDiscoveryClient
public class NacosProvideApplication {

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

4、NacosProvide9001.java

Controller代码:

/**
 * @author Administrator
 */
@RestController
/**
该注解用于实时刷新配置文件
**/
@RefreshScope
@RequestMapping("/provider")
public class NacosProvide9001 {

    @Value("${server.port}")
    private String serverPort;
	/**
	用于测试config动态更新
	*/
    @Value("${app.name}")
    private String userName;

    @GetMapping("/get")
    public String get() {
        System.out.println(userName);
        return userName;
    }

    @GetMapping("/getProviderServerPort")
    public String getServerPort() {
        return serverPort;
    }
}

到此,我们的provider配置结束了,我们启动这个子工程,打开控制台我们会在服务管理-服务列表中看到我们的此服务
在这里插入图片描述
点进这条记录中的详情可以看到我们运行在9001端口上的服务运行正常

在这里插入图片描述

3、搭建9002端口上的nacos-provide子工程

我们新建一个provider子工程运行在9002端口,搭建方法还是同9001的provider子工程。我偷懒就直接用copy了一份改了配置。
在这里插入图片描述

4、搭建9003端口上的nacos-consumer子工程

在这里插入图片描述

1、pom文件

这里我们只需要引入spring-cloud-starter-alibaba-nacos-discovery

<?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>nacos-test</artifactId>
        <groupId>com.taikangsc</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>nacos-consumer</artifactId>
    <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-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>

</project>

2、application.yml

server:
  port: 9003
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
  application:
    name: nacos-consumer
service-url:
#这个地址写nacos的服务列表里面的名称,保持一致,这个名称也是provider中的spring:application:name: nacos-producer
  nacos-user-service: http://nacos-producer

3、NacosConsumerApplication.java

同样要加上@EnableDiscoveryClient该注解

/**
 * @author Administrator
 */
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApplication {

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

4、NacosConsumer9003.java

/**
 * @author Administrator
 */
@RestController
public class NacosConsumer9003 {

    @Resource
    private RestTemplate restTemplate;

    @Value("${server.port}")
    private String serverPort;
    @Value("${service-url.nacos-user-service}")
    private String serverUrl;

    @GetMapping("/getServerPort")
    public String getServerPort() {
        return restTemplate.getForObject(serverUrl + "/provider/getProviderServerPort", String.class);
    }
}

5、Config.java

配置实现负载均衡,关键注解@LoadBalanced,前提这里我们新建一个provider子工程运行在9002端口,搭建方法还是同9001的provider子工程。

/**
 * @author Administrator
 * 实现负载均衡
 */
@Configuration
public class Config {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
        return builder.build();
    }
}

5、启动

我们先启动9001再启动9002,我们可以分别访问http://localhost:9001/provider/getProviderServerPorthttp://localhost:9002/provider/getProviderServerPort
看到分别出现9001、9002
在这里插入图片描述
再启动9003的nacos-consumer,查看控制台可以看到现在我们有两个微服务正在运行
在这里插入图片描述

接着我们访问http://localhost:9003/getServerPort可以看到9001、9002反复出现。这就实现了我们的服务注册和负载均衡。

下一篇我们会看一下如何实现服务配置的动态实时刷新。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值