SpringCloud(七):Ribbon自定義配置
阿新 • • 發佈:2019-01-05
從上篇部落格我們可以看到,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();
}
這裡是關鍵,還可以換成其它負載均衡策略。
完整的專案原始碼將在後面分享,敬請期待。。。