Ribbon负载均衡(了解)
Ribbon与nacos负载均衡的区别
服务端的负载均衡需要将被调用的方的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(); } }
@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); } }
/** * name: 被调方的唯一标识 * path: 被调方的controller层的路径 */ @FeignClient(name = "mycloud-cousmer",path = "/usr") public interface ConsumerClient { /** * feignClient中的方法与被调方要保持完全一致 * 返回值,注解,路径,参数,方法名 一致 * @return */ @RequestMapping("/findAll") public String findAll(); }
@RestController public class ProducerController { //调用上方clients文件的consumerClient @Autowired ConsumerClient consumerClient; @RequestMapping("/producer") public String producer(){ return consumerClient.findAll(); } }
ribbon: #设置超时时间为5秒 ConnectTimeout: 5000 ReadTimeout: 5000
浙公网安备 33010602011771号