nacos简易实现负载均衡

  • Post author:
  • Post category:其他





一、什么是Nacos?

在这里插入图片描述

英文全称:Dynamic Naming and Configuration Service

是由阿里巴巴团队开发的一个更易于帮助构建云原生应用的动态服务发现、配置和服务管理平台

Nacos 提供了一系列简单易用的特性,能够帮助我们快速地实现动态服务发现、服务配置等功能。



二、Nacos下载和安装


—> 参考文档



—> github下载



—> 镜像下载


官方推荐的是下载 2.0.3稳定版本


在这里插入图片描述



1. 使用Windows启动


cmd输入

startup.cmd -m standalone

在这里插入图片描述

在这里插入图片描述



2. 验证nacos是否成功启动

http://192.168.10.236:8848/nacos/index.html

账号:nacos , 密码:nacos

在这里插入图片描述

在这里插入图片描述



三、Nacos Discovery服务注册/发现

  1. 首先引入依赖:
        <!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2021.1</version>
        </dependency>
  1. 配置nacos的地址:

nacos.discovery.server-addr=127.0.0.1:8848

  1. 在启动类上加上

    @EnableDiscoveryClient

    注解

在这里插入图片描述

  1. 查看Nacos服务列表状态

在这里插入图片描述

这样子就证明我们的端口作为服务注册到了Nacos中去了!

  1. 服务列表不显示问题

在确保Nacos正常启动,上述操作也配置完毕,还是没有显示服务名称等信息时,请检查

spring-boot-starter-parent

的版本:

在这里插入图片描述



四、简易实现负载均衡

需要创建两个注册者(9001、9002)和一个消费者(8083)

在这里插入图片描述



1. 注册者配置

server:
  port: 9001
Spring:
  application:
    name: nacos-provider
  cloud:
    discovery:
      server-addr: localhost:8848
management:
  endpoint:
    web:
      exposure:
        include: '*'



2. 注册者启动类

@EnableDiscoveryClient //开启服务的注册与发现功能
@SpringBootApplication
public class Port9001Application {
    public static void main(String[] args) {
        SpringApplication.run(Port9001Application.class, args);
    }
}



3. 注册者业务层

@RestController
public class Port9001 {
    @Value("${server.port}")
    private String serverPort;
    @GetMapping("/getPort")
    public String getServerPort(){
        return "调用端口 " + serverPort + " 成功!";
    }
}



4. 消费者配置

server:
  port: 8083
Spring:
  application:
    name: nacos-consumer
  cloud:
    discovery:
      server-addr: localhost:8848
#消费者将要去访问的微服务名称
service-url:
  nacos-user-service: http://nacos-provider



5. 消费者启动类

@EnableDiscoveryClient
@SpringBootApplication
public class NacosConsumer8083Application {
    public static void main(String[] args) {
        SpringApplication.run(NacosConsumer8083Application.class, args);
    }
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}



6. 消费者业务层

@RestController
public class Port8083Controller {
    @Autowired
    private RestTemplate restTemplate;
    @Value("${service-url.nacos-user-service}")
    private String serverURL;
    @GetMapping(value = "consumer/nacos")
    public String getDiscovery(){
        /* 三个参数:填写访问的名称和url地址 + 调用接口的返回值类型 */
        return restTemplate.getForObject(serverURL+"/getPort",String.class);
    }
}



7. 开始调用接口

调用8083的

/consumer/nacos


在这里插入图片描述
再次刷新该页面

在这里插入图片描述

此处证明完成了远程的调用,同时具有负载均衡的效果!



8. 遇到问题解决




java.net.UnknownHostException: nacos-provider

依赖中加入

spring-cloud-loadbalancer

即可!

在这里插入图片描述



版权声明:本文为weixin_45203988原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。