1. 程式人生 > >SpringCloud(七):Ribbon自定義配置

SpringCloud(七):Ribbon自定義配置

從上篇部落格我們可以看到,Ribbon預設的負載均衡策略為輪詢。如果想自定義改如何配置,小編將在這篇部落格帶你一步一步完成自定義配置。

在上篇的專案基礎上做更改。

一、編寫一個註解ExcludeFromComponentScan.java

package com.itmuch.cloud;

public @interface ExcludeFromComponentScan {
	
}

二 、編寫一個TestConfiguration.java,將負載均衡策略變為隨機

package com.itmuch.cloud;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


import com.netflix.client.config.IClientConfig;
import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;


@Configuration
@ExcludeFromComponentScan
public class TestConfiguration {
@Autowired
IClientConfig config;

@Bean 
public IRule ribbonRule(IClientConfig config){
return new RandomRule();
}
}
public class TestConfiguration {
	@Autowired
	IClientConfig config;
	
	@Bean 
	public IRule ribbonRule(IClientConfig config){
		return new RandomRule();
	}
}

三、修改啟動類ConsumerMovieRibbonApplication.java

在類上新增兩個註解:

@RibbonClient(name="microservice-provider-user",configuration = TestConfiguration.class)
@ComponentScan(excludeFilters={@ComponentScan.Filter(type=FilterType.ANNOTATION,value=ExcludeFromComponentScan.class)})

四、在Controller中新增測試程式碼:

@Autowired
private LoadBalancerClient LoadBalancerClient;

@GetMapping("/test")
public String test() {
	ServiceInstance serviceInstance = this.LoadBalancerClient.choose("microservice-provider-user");
	System.out.println("111"+serviceInstance.getHost()+":"+serviceInstance.getPort()+":"+serviceInstance.getServiceId());
		
	ServiceInstance serviceInstance2 = this.LoadBalancerClient.choose("microservice-provider-user2");
	System.out.println("222"+serviceInstance2.getHost()+":"+serviceInstance2.getPort()+":"+serviceInstance2.getServiceId());
		
	return "1";
}

五、啟動

先啟動eureka,再啟動四個提供者例項,7900,7901,7902(user2),7903(user2),修改application.yml即可。最後啟動消費者。啟動成功介面:


六、訪問頁面:localhost:8010/test,重新整理八次。


小結

到這裡,自定義配置的展示就完成了。其中的知識點總結一下。

1、掃描包的排除:

@Configuration這個註解是不能@SpringBootApplication的所在掃描到的,否則將自定義的配置將失效。所以需要將TestConfiguration.java排除在包掃描之外,用自定義的註解@ExcludeFromComponentScan,然後在啟動類加註解@ComponentScan(excludeFilters{@ComponentScan.Filter(type=FilterType.ANNOTATION,value=ExcludeFromComponentScan.class)})

其排除。

2、自定義負載均衡策略的更換。

@Bean 
public IRule ribbonRule(IClientConfig config){
	return new RandomRule();
}
這裡是關鍵,還可以換成其它負載均衡策略。

完整的專案原始碼將在後面分享,敬請期待。。。