本文介紹SpringCloud的另一個基礎模塊 Spring Cloud Commons模塊 。只要在項目的pom文件中引入了 spring-cloud-starter
依賴包 ,就可以保證 spring-cloud-commons
的jar被引入。
Spring Cloud Commons模塊設計的目的,Spring Cloud Commons模塊是爲了對微服務中的服務註冊與發現、負載均衡、熔斷器等功能提供一個抽象層代碼,這個抽象層與具體的實現無關。這樣這些功能具體的實現上可以採用不同的技術去實現,並可以做到在使用時靈活的更換。
下面是一些常用的抽象點:
-
@EnableDiscoveryClient
該註解是用來在META-INF/spring.factorie文件中查找DiscoveryClient接口的實現類,並以Bean的形式加載到Spring的IoC容器中。在使用的時候會把這個註解加在SpringBoot的main類上。但這個註解在目前springCloud的Greenwich版本上已經不再需要了(也就是可有可無),只要引入具體的DiscoveryClient接口的jar依賴就可以,因爲具體實現包上會通過自動配置類進行設置。 -
ServiceRegistry接口
這個接口提供註冊Registration與撤銷Registration的註冊的方法。這裏的Registration是一個標記接口,用來描述一個服務實例,具體包含關於實例的信息,比如它的主機名和端口等信息。 -
讓Spring RestTemplate具備負載均衡功能
在創建RestTemplate的Bean時使用@LoadBalanced註解,就可以自動配置爲使用ribbon。如下面的示例所示:
@Configuration
public class MyConfiguration {
@LoadBalanced
@Bean
RestTemplate restTemplate() {
return new RestTemplate();
}
}
public class MyClass {
@Autowired
private RestTemplate restTemplate;
public String doOtherStuff() {
//注意:代碼中的url要使用服務名,而不是主機名
String results = restTemplate.getForObject("http://stores/stores", String.class);
return results;
}
}