分布式微服务 SpringCloud 中 Ribbon 负载均衡 组件搭建

搭建服务注册与发现参考如下文章

SpringCloud的Eureka的服务注册与发现入门配置_L0317的博客-CSDN博客1.父pom文件导入依赖: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.6.2</version> </parent><depen...https://blog.csdn.net/L0317/article/details/122345877?spm=1001.2014.3001.5501

 根据上面的文章复制一份一模一样的服务提供商,修改端口即可

访问服务可视化界面如下,则user-provider的2台服务提供者,微服务启动成功

分配资源配置4种配置

1.编写资源分配配置类

package com.guigu.cloud.config;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RibbonConfig {
    @Bean
    // LoadBalanced加了这个注解默认配置轮询的资源分配
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    // 随机分配注入
    @Bean
    public IRule iRule(){
        return new RandomRule();
    }
}

2.启动类指定资源分配配置类

package com.guigu.cloud.config;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RibbonPrivateConfig {

    @Bean
    public IRule rule(){
        return new RandomRule();
    }
}

3.yml文件指定资源分配类

#消费者的服务名
user-provider:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
    #    4种资源分配
    #    com.netflix.loadbalancer.RandomRule:随机选择一个server
    #    com.netflix.loadbalancer.BestAvailabl:选择一个最小的并发请求的server,逐个考察Server,如果Server被tripped了,则忽略
    #    com.netflix.loadbalancer.RoundRobinRule:roundRobin方式轮询选择, 轮询index,选择index对应位置的server
    #    com.netflix.loadbalancer.WeightedResponseTimeRule:根据响应时间分配一个weight(权重),响应时间越长,weight越小,被选中的可能性越低

4.自定义轮询算法

package com.guigu.cloud.IRule;

import com.netflix.client.config.IClientConfig;
import com.netflix.loadbalancer.AbstractLoadBalancerRule;
import com.netflix.loadbalancer.Server;

public class CustomIRule extends AbstractLoadBalancerRule {
    @Override
    public void initWithNiwsConfig(IClientConfig iClientConfig) {

    }

    @Override
    public Server choose(Object o) {
        //自定义资源分配算法
        /*Server内部字段
        public static final String UNKNOWN_ZONE = "UNKNOWN";
        private String host;
        private int port;
        private String scheme;
        private volatile String id;
        private volatile boolean isAliveFlag;
        private String zone;
        private volatile boolean readyToServe;
        private Server.MetaInfo simpleMetaInfo;*/
        return null;
    }
}

注:yml文件的ribbon配置需要指定自定义分配算法的类

#消费者的服务名
user-provider:
  ribbon:
    NFLoadBalancerRuleClassName: com.guigu.cloud.IRule.CustomIRule

编写消费者Controller类

package com.guigu.cloud.controller;

import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;

@RestController
@RequestMapping("consumer")
public class UserController {
    @Resource
    /*发送请求对象*/
    private RestTemplate restTemplate;

    @Resource
    /*获取ruewka注册中心信息对象*/
    private DiscoveryClient discoveryClient;

    @RequestMapping("user/{id}")
    public Object findById(@PathVariable Integer id){

        //发送请求
        String url = "http://user-provider/user/find/"+id;
        String forObject = restTemplate.getForObject(url, String.class);

        System.out.println(forObject);
        return forObject;
    }
}

运行消费者启动类,访问消费者Controller,轮询结果如下 

源码链接,仅供学习参考!!!

springCloud_eureka.zip - 蓝奏云文件大小:33.9 K|https://llh317.lanzout.com/iAT2vyoxrjc

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值