Ribbon负载均衡(了解)

Ribbon与nacos负载均衡的区别

nginx的负载均衡是服务端的负载均衡。ribbon的负载均衡是客户端的负载均衡;

服务端的负载均衡需要将被调用的方的ip以及端口号进行配置。服务端的负载均衡 需要自己手动的进行配置,才能完成调用。如果没有配置,则无法进行负载;

服务端的负载均衡还可以 LVC(硬件方面) ;由于价格贵,很少公司使用;

客户端的负载均衡,是调用方通过唯一标识从注册中心获取到可用服务的所有的ip 地址以及端口号,在通过调用方的负载均衡算法来发起远程调用。

客户端负载均衡.会在当前的调用方维护—份服务列表。服务列表是通过注册中 心获取到的;

服务器负载均衡

客户端的负载均衡

负载均衡(了解)

~~Application中
@SpringBootApplication
@EnableDiscoveryClient //能够让注册中心能够发现,扫描到服务。
public class MycloudProducerApplication {

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

    @Bean
    //负载均衡 代表使用restTepmplatej进行调用时负载均衡
    @LoadBalanced
    public RestTemplate restTemplate(){
       return new RestTemplate();
    }
}
在调用的controller中
@RestController
public class ProducerController {

   @Autowired
   RestTemplate restTemplate;

//获取被调方的IP地址(下方的两个)
    @Autowired
    NacosServiceManager nacosServiceManager;
    @Autowired
    NacosDiscoveryProperties nacosDiscoveryProperties;
    

    @RequestMapping("/producer")
    public String producer(){
        //1.定义被调方的名称
        String serviceId="mycloud-cousmer";
         //ribbon 负载均衡
        //1.通过serviceId 获取到该服务的所有的ip:port.
        // 2.在通过负载均衡算法 请求某个具体的服务 :默认的负载均衡算法是轮询算法

           return restTemplate.getForObject("http://"+serviceId+"/findAll",String.class);
    }
}

负载均衡算法

这是放在调用方的config中

@Configuration
public class MyRule {

    @Bean
    public IRule rule(){
        //RandomRule 随机的负载均衡策略
        //BestAvailableRule 选择一个并发最小的服务进行请求
        //RoundRobinRule 轮询规则 默认的规则
        //RetryRule 默认也是轮询,但是当某个服务多次出现异常时,会剔除该服务,继续轮询剩下的服务
        return new RandomRule();
    }
}

Feign 结合了http以及ribbon的远程调用组件(用这个)

依赖

        <!-- 结合feign组件完成远程调用 集成了ribbon以及http请求-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

使用

1,启动的~~Application中只用加@EnableFeignClients
@SpringBootApplication
@EnableDiscoveryClient //能够让注册中心能够发现,扫描到改服务。
@EnableFeignClients//开启feing的远程调用
public class MycloudProducerApplication {

    public static void main(String[] args) {
        SpringApplication.run(MycloudProducerApplication.class);
    }
}
2,在调用方中创建clients文件并放入下方代码;
/**
 * name: 被调方的唯一标识
 * path: 被调方的controller层的路径
 */
@FeignClient(name = "mycloud-cousmer",path = "/usr")
public interface ConsumerClient {

    /**
     * feignClient中的方法与被调方要保持完全一致
     * 返回值,注解,路径,参数,方法名 一致
     * @return
     */
    @RequestMapping("/findAll")
    public String findAll();
}
3.在调用方的controller中;
@RestController
public class ProducerController {
    //调用上方clients文件的consumerClient
    @Autowired
    ConsumerClient consumerClient;

    @RequestMapping("/producer")
    public String producer(){
        return consumerClient.findAll();
    }
}
4,在yml文件中
ribbon:
#设置超时时间为5秒
 ConnectTimeout: 5000
 ReadTimeout: 5000

 

posted on 2023-03-03 01:19  鲤斌  阅读(154)  评论(0)    收藏  举报