SpringCloud的Eureka的Ribbon的资源分配

SpringCloud的Eureka的Ribbon的资源分配,第1张

SpringCloud的Eureka的Ribbon的资源分配 搭建服务注册与发现参考如下文章

SpringCloud的Eureka的服务注册与发现入门配置_L0317的博客-CSDN博客1.父pom文件导入依赖: org.springframework.boot spring-boot-starter-parent 2.6.2

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

访问服务可视化界面如下,则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
    #    自定义资源分配
    #    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) {
        //自定义资源分配算法
        
        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
    
    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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5706237.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存