版权声明:fromZjy QQ1045152332 https://blog.csdn.net/qq_36762677/article/details/84404378
目录
如何实现负载均衡?
- 使用nginx服务器(服务器端负载均衡)
- Ribbon(客户端负载均衡)
一、ribbon
Ribbon是什么
官网:https://springcloud.cc/spring-cloud-dalston.html#spring-cloud-ribbon
消费者Ribbon从eureka server上拉取可用列表,也需要注册到eureka server上
提供多种策略:
- 轮询
- 随机
- 根据响应时间加权
负载均衡的使用
1.默认轮询
通过Spring Cloud Ribbon的封装,我们在微服务架构中使用客户端负载均衡调用非常简单,只需要如下两步:
▪️ 服务提供者只需要启动多个服务实例并注册到一个注册中心或是多个相关联的服务注册中心。
▪️ 服务消费者直接通过调用被@LoadBalanced注解修饰过的RestTemplate来实现面向服务的接口调用。
这样,我们就可以将服务提供者的高可用以及服务消费者的负载均衡调用一起实现了。
https://www.jianshu.com/p/1bd66db5dc46
2.核心组件IRule修改负载均衡策略
3.自定义配置(特殊定制)
/**
* @author zhaojianyu
*/
@Configuration
@ExcludeFromComponentScan
public class RibbonConfiguration {//自定义配置文件可以复制源码进行修改
@Autowired
IClientConfig config;
@Bean
public IRule ribbonRule(IClientConfig config){
//随机策略
return new RandomRule();
//默认轮询RoundRobinRule();
//还有其他5种
}
}
消费者启动类
@SpringBootApplication
@EnableEurekaClient
@RibbonClients
/**
* ribbon指定自定义的负载均衡策略
* eureka-client-user是被调用者
*/
@RibbonClient(name="eureka-client-user",configuration = RibbonConfiguration.class)
@ComponentScan(excludeFilters={@ComponentScan.Filter(type= FilterType.ANNOTATION,value= ExcludeFromComponentScan.class)})
public class EurekaClientMovieApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaClientMovieApplication.class, args);
}
}
https://blog.csdn.net/qwlzxx/article/details/77118634
二、Fegin
Feign是一个声明式的Web服务客户端。
这使得Web服务客户端的写入更加方便 要使用Feign创建一个界面并对其进行注释
默认继承了ribbon轮询
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
启动类
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class EurekaClientMovieFeignApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaClientMovieFeignApplication.class, args);
}
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
消费者feign接口-面向生产者接口编程
@FeignClient("eureka-client-user")
public interface FeignClientOne {
/**
* 指定服务提供者 ,以及调用服务提供者的方法
* C版本的spring是不能用getMapping的
*/
@GetMapping("/user")
String getUser();
}
controller 注入后,直接调用feign就能访问生产者接口
@RestController
public class HelloController {
@Autowired
private FeignClientOne feignClientOne;
@RequestMapping("/movie")
public String hello() {
return "feign:"+feignClientOne.getUser();
}
}
自定义配置
- 自定义配置方法
- 指定配置类
使用url访问
- 配置类
- url访问使用方法
配置feign输出日志
- yml配置
- 配置类
配置超时时间和重试机制
默认超时时间为1s
https://blog.csdn.net/east123321/article/details/82385816