当前位置: 首页 > article >正文

SpringCloud -根据服务名获取服务运行实例并进行负载均衡

Nacos注册中心

每个服务启动之后都要向注册中心发送服务注册请求,注册中心可以和各个注册客户端自定义协议实现服务注册和发现。

  • pom.xml
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
  • 启动服务

在这里插入图片描述
在这里插入图片描述

获取服务实例测试
@EnableDiscoveryClient
@SpringBootApplication
public class Main83
{
    public static void main(String[] args)
    {
        ConfigurableApplicationContext applicationContext = SpringApplication.run(Main83.class, args);

        DiscoveryClient discoveryClient = applicationContext.getBean(DiscoveryClient.class);
        List<ServiceInstance> instances = discoveryClient.getInstances("nacos-payment-provider");
        for (ServiceInstance instance : instances) {
            System.out.println("instance.getHost() = " + instance.getHost());
            System.out.println("instance.getPort() = " + instance.getPort());
        }

        NacosDiscoveryClient nacosDiscoveryClient = applicationContext.getBean(NacosDiscoveryClient.class);
        List<ServiceInstance> serviceInstances = nacosDiscoveryClient.getInstances("nacos-payment-provider");
        for (ServiceInstance instance : serviceInstances) {
            System.out.println("Nacos instance.getHost() = " + instance.getHost());
            System.out.println("instance.getPort() = " + instance.getPort());
        }

        LoadBalancerClient balancerClient = applicationContext.getBean(LoadBalancerClient.class);
        System.out.println("balancerClient.choose(\"nacos-payment-provider\").getPort() = " + balancerClient.choose("nacos-payment-provider").getPort());
        System.out.println("balancerClient.choose(\"nacos-payment-provider\").getPort() = " + balancerClient.choose("nacos-payment-provider").getPort());
        System.out.println("balancerClient.choose(\"nacos-payment-provider\").getPort() = " + balancerClient.choose("nacos-payment-provider").getPort());
        System.out.println("balancerClient.choose(\"nacos-payment-provider\").getPort() = " + balancerClient.choose("nacos-payment-provider").getPort());
        System.out.println("balancerClient.choose(\"nacos-payment-provider\").getPort() = " + balancerClient.choose("nacos-payment-provider").getPort());
        System.out.println("balancerClient.choose(\"nacos-payment-provider\").getPort() = " + balancerClient.choose("nacos-payment-provider").getPort());

    }


}

在引入注册中心相关的依赖后,注册中心的相关API会实现SpringCloud规范,自动给容器中存入DiscoveryClient对象,引入了Nacos,就是NacosDiscoveryClient。通过DiscoveryClient接口提供的能力可以从注册中心实时拉取服务列表。

  • 负载均衡实现
    微服务在自动进行服务发现后,进行的是客户端负载均衡,也就是客户端自己维护了一套负载均衡算法,每次请求选择某一台服务器进行请求。

pom.xml

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>
LoadBalancerClient balancerClient = applicationContext.getBean(LoadBalancerClient.class);
        System.out.println("balancerClient.choose(\"nacos-payment-provider\").getPort() = " + balancerClient.choose("nacos-payment-provider").getPort());
        System.out.println("balancerClient.choose(\"nacos-payment-provider\").getPort() = " + balancerClient.choose("nacos-payment-provider").getPort());
        System.out.println("balancerClient.choose(\"nacos-payment-provider\").getPort() = " + balancerClient.choose("nacos-payment-provider").getPort());
        System.out.println("balancerClient.choose(\"nacos-payment-provider\").getPort() = " + balancerClient.choose("nacos-payment-provider").getPort());
        System.out.println("balancerClient.choose(\"nacos-payment-provider\").getPort() = " + balancerClient.choose("nacos-payment-provider").getPort());
        System.out.println("balancerClient.choose(\"nacos-payment-provider\").getPort() = " + balancerClient.choose("nacos-payment-provider").getPort());

LoadBalancerClient类会自动使用容器中的DiscoveryClient进行服务的负载均衡。


http://www.kler.cn/a/510756.html

相关文章:

  • Spring Boot项目集成Redisson 原始依赖与 Spring Boot Starter 的流程
  • tui-editor报错
  • openharmony应用开发快速入门
  • 【陕西省乡镇界】面图层shp格式arcgis数据乡镇名称和编码2020年wgs84坐标无偏移内容测评
  • SiamCAR(2019CVPR):用于视觉跟踪的Siamese全卷积分类和回归网络
  • 用公网服务器实现内网穿透
  • 中型项目中 HTTP 的挑战与解决方案
  • 大型系统中 HTTP 的优化与部署
  • STM32使用DSP库 Keil方式添加
  • 数据可视化大屏设计与实现
  • OpenWrt 中使用 LuCI 界面部署 Docker 镜像
  • 【C++学习篇】哈希表的实现
  • vue+高德API搭建前端3D交通页面
  • flutter 使用google_mlkit_image_labeling做图片识别
  • Spring Boot 整合 log4j2 日志配置教程
  • 洛谷P4868 Preprefix sum
  • 基于ESP32+VUE+JAVA+Ngnix的一个小型固件编译系统
  • Top期刊算法!RIME-CNN-BiLSTM-Attention系列四模型多变量时序预测
  • 最新版Edge浏览器加载ActiveX控件技术——allWebPlugin中间件之awp_CreateActiveXObject接口用法
  • hydra破解密码
  • USB3020任意波形发生器4路16位同步模拟量输出卡1MS/s频率 阿尔泰科技
  • FPGA 时钟功能
  • 到底应不应该使用@Builder
  • 【Linux系统编程】—— 虚拟内存与进程地址空间的管理:操作系统如何实现内存保护与高效分配
  • 算法日记6.StarryCoding P52:我们都需要0(异或)
  • Hugging Face功能介绍,及在线体验文生图模型Flux