nacos简易实现负载均衡

发布时间:2023-04-10 18:30

目录

  • 一、什么是Nacos?
  • 二、Nacos下载和安装
    • 1. 使用Windows启动
    • 2. 验证nacos是否成功启动
  • 三、Nacos Discovery服务注册/发现
  • 四、简易实现负载均衡
    • 1. 注册者配置
    • 2. 注册者启动类
    • 3. 注册者业务层
    • 4. 消费者配置
    • 5. 消费者启动类
    • 6. 消费者业务层
    • 7. 开始调用接口
    • 8. 遇到问题解决
      • `java.net.UnknownHostException: nacos-provider`


一、什么是Nacos?

nacos简易实现负载均衡_第1张图片
英文全称:Dynamic Naming and Configuration Service
是由阿里巴巴团队开发的一个更易于帮助构建云原生应用的动态服务发现、配置和服务管理平台
Nacos 提供了一系列简单易用的特性,能够帮助我们快速地实现动态服务发现、服务配置等功能。

二、Nacos下载和安装

—> 参考文档
—> github下载
—> 镜像下载

官方推荐的是下载 2.0.3稳定版本
nacos简易实现负载均衡_第2张图片

1. 使用Windows启动

cmd输入

startup.cmd -m standalone

nacos简易实现负载均衡_第3张图片
nacos简易实现负载均衡_第4张图片

2. 验证nacos是否成功启动

http://192.168.10.236:8848/nacos/index.html
账号:nacos , 密码:nacos
nacos简易实现负载均衡_第5张图片
nacos简易实现负载均衡_第6张图片

三、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注解

nacos简易实现负载均衡_第7张图片

  1. 查看Nacos服务列表状态

nacos简易实现负载均衡_第8张图片
这样子就证明我们的端口作为服务注册到了Nacos中去了!

  1. 服务列表不显示问题

在确保Nacos正常启动,上述操作也配置完毕,还是没有显示服务名称等信息时,请检查spring-boot-starter-parent的版本:
nacos简易实现负载均衡_第9张图片

四、简易实现负载均衡

需要创建两个注册者(9001、9002)和一个消费者(8083)
nacos简易实现负载均衡_第10张图片

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
nacos简易实现负载均衡_第11张图片再次刷新该页面
nacos简易实现负载均衡_第12张图片
此处证明完成了远程的调用,同时具有负载均衡的效果!

8. 遇到问题解决

java.net.UnknownHostException: nacos-provider

依赖中加入spring-cloud-loadbalancer即可!
nacos简易实现负载均衡_第13张图片

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号