nacos 2022.0.0.0 版本实现负载均衡及集群

发布于:2024-04-22 ⋅ 阅读:(192) ⋅ 点赞:(0)

一、loadbalancer实现负载均衡

新版本的nacos已经取消了对ribbon的支持,所以不能使用ribbon来实现nacos提供的负载均衡。

但是新版本中我们可以使用loadbalancer实现负载均衡。

二、导入loadbalancer坐标

1、原本的坐标:

在parent的pom.xml中

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.4</version>
        <relativePath/>
    </parent>
            <!-- springCloud -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>2023.0.1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--nacos的管理依赖-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2022.0.0.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

 在继承parent的pom.xml中

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

 

2、修改后添加的loadbalancer坐标

 在继承parent的pom.xml中加入

        <!-- nacos配置管理依赖包 -->
        <!--负载均衡-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>

三、默认轮询策略

在导入maven坐标后需要在启动类加入以下代码

    /**
     * 创建RestTemplate对象,并注入Spring容器中
     * @return
     */
    @Bean
    @LoadBalanced//负载均衡
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

注入bean对象,调用该对象即可实现负载均衡,但是实现的是默认的轮询策略,就是消费者会轮流使用提供者提供的方法。

下面是application.yml需要配置的nacos。

spring:
  application:
    name: orderservice #order服务的名称
  cloud:
    # 负载均衡配置
    loadbalancer:
      ribbon:
        #禁用ribbon
        enabled: false # 爆红黄线的话不设置也可以
    nacos:
      discovery:
        server-addr: localhost:8848 #nacos服务地址
        cluster-name: HZ #设置集群名称

默认是禁用ribbon的,所以ribbon那边配置不配置都行。

四、使用随机策略

参考官方文档:Cloud Native Applications

先建一个config包来放配置类:

注意:那个Environment是 org.springframework.core.env.Environment这个包下的

import org.springframework.core.env.Environment;
public class CustomLoadBalancerConfiguration {

    @Bean
    ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment,
                                                            LoadBalancerClientFactory loadBalancerClientFactory) {
        String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
        return new RandomLoadBalancer(loadBalancerClientFactory
                .getLazyProvider(name, ServiceInstanceListSupplier.class),
                name);
    }
}

 在消费者的启动类上加上下面这个注解,这个是我们根据官方文档自定义的随机策略配置类对应的注解

@LoadBalancerClients(defaultConfiguration = {CustomLoadBalancerConfiguration.class})
//扫描mapper对应包
@MapperScan("com.bluefox.order.mapper")
@SpringBootApplication
// 使用@LoadBalanced注解赋予RestTemplate负载均衡的能力
//注入配置类,这个配置是我们自定义的策略--随机策略
@LoadBalancerClients(defaultConfiguration = {CustomLoadBalancerConfiguration.class})
public class OrderApplication {

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

    /**
     * 创建RestTemplate对象,并注入Spring容器中
     * @return
     */
    @Bean
    @LoadBalanced//负载均衡
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

}

五、集群

根据集群不同设置不同名字

spring:
  application:
    name: orderservice #order服务的名称
  cloud:
    # 负载均衡配置
    loadbalancer:
      ribbon:
        #禁用ribbon
        enabled: false # 爆红黄线的话不设置也可以
    nacos:
      discovery:
        server-addr: localhost:8848 #nacos服务地址
        cluster-name: HZ #设置集群名称
    nacos:
      discovery:
        server-addr: localhost:8848 #nacos服务地址
        cluster-name: HZ #设置集群名称

 

在 Nacos 中定义不同的分组(Group),用于区分不同的集群或服务,在LoadBalancer这个策略中似乎不能像NacosRule 的实现可以优先从同集群中挑选实例,并且支持同集群内的随机策略,就是同集群只访问同集群,所以可以用分组来区分。

    nacos:
      discovery:
        server-addr: localhost:8848 #nacos服务地址
        cluster-name: HZ #设置集群名称
        group: HZ-group # 服务的分组名称

在集群这方面有不同见解欢迎指正啊!!!

 

 


网站公告

今日签到

点亮在社区的每一天
去签到