調用其他微服務的三種方式
一、rest方式(底層Httpclient工具)
@SuppressWarnings("unchecked")
@Service
public class MemberService {
@Autowired
RestTemplate restTemplate;
public List<String> getOrderByUserList() {
return restTemplate.getForObject("http://service-member/getUserList",
List.class);//傳回值.class
}
}
二、ribbon方式(底層Httpclient工具)
在工程的啟動類中,通過@EnableDiscoveryClient向服務中心注冊;并且向程式的ioc注入一個bean: restTemplate;并通過@LoadBalanced注解表明這個restRemplate開啟負載均衡的功能。使用負載均衡政策輪訓到調用服務接口
@EnableEurekaClient
@SpringBootApplication
public class AppOrder {
public static void main(String[] args) {
SpringApplication.run(AppOrder.class, args);
}
@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
}
二、Feign方式(底層Httpclient工具) feignClient已經預設使用了ribbon自帶負載均衡
啟動類@EnableFeignClients
fegin 代碼
@FeignClient(value="service-member",fallback=MemberFeignService.class)
public interface MemberFeign {
@RequestMapping("/getMemberAll")
public List<String> getOrderByUserList(); //方法名随便寫
}
* 1、這裡需要設定請求的方式為 RequestMapping 注解,用 GetMapping 注解是運作不成功的,即 GetMapping 不支援。
*
* 2、注解 PathVariable 裡面需要填充變量的名字,不然也是運作不成功的。
首先通過@EnableFeignCleints注解開啟FeignCleint
根據Feign的規則實作接口,并加@FeignCleint注解
程式啟動後,會進行包掃描,掃描所有的@ FeignCleint的注解的類,并将這些資訊注入到ioc容器中。
當接口的方法被調用,通過jdk的代理,來生成具體的RequesTemplate
RequesTemplate在生成Request
Request交給Client去處理,其中Client可以是HttpUrlConnection、HttpClient也可以是Okhttp
最後Client被封裝到LoadBalanceClient類,這個類結合類Ribbon做到了負載均衡。