客户端负载均衡与服务器端负载均衡区别?
服务器端负载均衡:
例如:Nginx,通过Nginx进行负载均衡,先发送请求,然后通过负载均衡算法,在多个服务器之间选择一个进行访问;即在服务器端再进行负载均衡算法分配。
客户端负载均衡:
例如:spring cloud中的ribbon,客户端会有一个服务器地址列表,在发送请求前通过负载均衡算法选择一个服务器,然后进行访问,这是客户端负载均衡;即在客户端就进行负载均衡算法分配。
ribbon的默认负载均衡(轮询),当多次访问Eureka(注册中心)中同一个服务时(该服务有多个服务提供者),采用轮询方式,也可自定义配置。
自定义配置:
1、配置类置于启动类包扫描不到的位置。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | /** * * 如果这个配置文件是一个全局的配置文件, 那么就把这个类放到SpringBootApplication或者是Compentscan能扫描到的包里面 * 如果是一个单独的配置, 把这个文件放到不能被上面两个注解扫描到的包,也就是当前类所在的包层级要比他们高,然后单独配置给每一个需要这个配置的负载均衡客户端即可 * */ @Configuration public class RibbonConfig { @Bean public IRule iRule() { return new RandomRule(); //随机 } } |
2、排除包扫描,(自定义注解,排除扫描该类)
1 2 3 4 5 6 7 8 9 | /**接口 * * 我们当前的注解本身没有任何含义,就是一个特征标记 * */ @Target (ElementType.TYPE) @Retention (RetentionPolicy.RUNTIME) public @interface Abcfdsfdsfdsfds { } |
1 2 3 4 5 6 7 8 | //配置类@Configuration @Abcfdsfdsfdsfds public class RibbonConfig { @Bean public IRule iRule() { return new RandomRule(); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | //启动类@SpringBootApplication @EnableDiscoveryClient //如果给多个服务开启负载均衡,通过下面的注解实现 @RibbonClients ({ @RibbonClient (name = "04PROVIDER-EUREKA" , configuration = RibbonConfig. class ), @RibbonClient (name = "04PROVIDER-EUREKA1" )}) @ComponentScan (excludeFilters={ @ComponentScan .Filter({Abcfdsfdsfdsfds. class })}) public class ConsumerStartApp { public static void main (String[] args){ SpringApplication.run(ConsumerStartApp. class ,args); } @Bean @LoadBalanced //告诉template 注意有一些服务需要开启负载均衡,通过服务的名字可以访问 public RestTemplate template() { return new RestTemplate(); } } |
3、通过配置文件 application.yml
server:
port: 10100
spring:
application:
name: 09consumer-eureka-riibon-config-properties
eureka:
client:
service-url:
defaultZone: http://localhost:12000/eureka
#给 04PROVIDER-EUREKA配置负载均衡的规则为 com.netflix.loadbalancer.RandomRule
04PROVIDER-EUREKA:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
@SpringBootApplication @EnableDiscoveryClient //@RibbonClient(name = "04PROVIDER-EUREKA",configuration = RibbonConfig.class)//给04PROVIDER-EUREKA服务开启负载均衡 //如果给多个服务开启负载均衡,通过下面的注解实现 @RibbonClients({@RibbonClient(name = "04PROVIDER-EUREKA"),@RibbonClient(name = "04PROVIDER-EUREKA1")}) public class ConsumerStartApp { public static void main (String[] args){ SpringApplication.run(ConsumerStartApp.class,args); } @Bean @LoadBalanced//告诉template 注意有一些服务需要开启负载均衡,通过服务的名字可以访问 public RestTemplate template() { return new RestTemplate(); } }
以上仅供参考。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步