現有兩個SpringBoot應用,應用 A和應用B:
應用A通過Feign遠程調用應用B,但如果應用B單個應用無法支撐應用A的大量請求,則可如下實現應用B的多實例。
1.應用B多個實例都註冊到同一個Eureka,且所有實例的配置文件中的:spring.application.name都相同:
spring.application.name: appb
2. 所有的應用B啓動類都增加EnableDiscoveryClient註解,服務在啓動的過程中會想Eureka中註冊該服務:
@EnableDiscoveryClient
@SpringBootApplication
public class ApplicationB{
public static void main(String[] args) {
SpringApplication.run(ApplicationB.class, args);
}
}
3. 應用A啓用EnableDiscoveryClient和EnableFeignClient註解,且應用A開啓負載均衡能力:
@EnableDiscoveryClient //用於啓動服務發現功能,將應用A註冊到Eureka
@EnableFeignClients //用於啓動Fegin功能,以支持服務A遠程訪問應用B
@SpringBootApplication
public class ApplicationA {
public static void main(String[] args) {
SpringApplication.run(ApplicationA.class);
}
@Bean //定義REST客戶端,RestTemplate實例
@LoadBalanced //開啓負債均衡的能力
RestTemplate restTemplate() {
return new RestTemplate();
}
}
4.訪問服務A,Ribbon會根據自己的算法,輪流調用Eureka中不同的ApplicationB應用的實例。