服務器端負載均衡:
例如:Nginx,通過Nginx進行負載均衡,先發送請求,然后通過負載均衡算法,在多個服務器之間選擇一個進行訪問;即在服務器端再進行負載均衡算法分配。
客戶端負載均衡:
例如:spring cloud中的ribbon,客戶端會有一個服務器地址列表,在發送請求前通過負載均衡算法選擇一個服務器,然后進行訪問,這是客戶端負載均衡;即在客戶端就進行負載均衡算法分配。
ribbon的默認負載均衡(輪詢),當多次訪問Eureka(注冊中心)中同一個服務時(該服務有多個服務提供者),采用輪詢方式,也可自定義配置。
自定義配置:
1、配置類置於啟動類包掃描不到的位置。
/** * * 如果這個配置文件是一個全局的配置文件, 那么就把這個類放到SpringBootApplication或者是Compentscan能掃描到的包里面 * 如果是一個單獨的配置, 把這個文件放到不能被上面兩個注解掃描到的包,也就是當前類所在的包層級要比他們高,然后單獨配置給每一個需要這個配置的負載均衡客戶端即可 * */ @Configuration public class RibbonConfig { @Bean public IRule iRule() { return new RandomRule(); //隨機 } }
2、排除包掃描,(自定義注解,排除掃描該類)
/**接口
*
* 我們當前的注解本身沒有任何含義,就是一個特征標記
*
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Abcfdsfdsfdsfds {
}
//配置類
@Configuration @Abcfdsfdsfdsfds public class RibbonConfig { @Bean public IRule iRule() { return new RandomRule(); } }
//啟動類
@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(); } }
以上僅供參考。