服務調用有2種方式:REST、RPC,SpringCloud使用RestTemplate實現REST調用,此外SpringCloud還可以使用Feign進行聲明式服務調用,所謂聲明式就是通過服務接口來調用,和RPC相似。
服務消費者
feign是一種服務調用方式,自然是在消費者中使用的
1、創建時勾選Spring Cloud Routing -> OpenFeign,或者手動添加依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2、引導類上加 @EnableFeignClients
在引導類上加@EnableXxx的,在啓動時會掃描相關注解
3、新建包feign用來存放feign服務調用的接口
@FeignClient("order-service") //指定要調用的服務名稱。feign也內置了ribbon,會自動實現負載均衡
public interface OrderServiceFeign {
@GetMapping("/api/v1/order/list/{user_id}") //指定地址
List<Order> findOrdersByUserId(@PathVariable("user_id") Integer userId);
}
feign 僞裝、假裝,feign只是僞rpc調用,實際使用的還是REST,通過地址來調用,使用的協議還是HTTP。
4、service
@Service
public class UserService {
@Autowired
private OrderServiceFeign orderServiceFeign; //注入要使用的Feign接口
public List<Order> findOrdersById(Integer userId){
//通過Feign接口進行服務調用
return orderServiceFeign.findOrdersByUserId(userId);
}
}
feign並沒有提高性能,實際使用的還是REST,與直接使用REST相比
- Feign要將REST包裝爲Feign接口,有額外的開銷,拉低了性能
- 服務接口變動時,只需修改feign包下的Feign接口,無需找到所有的REST服務調用進行修改,易於維護
Feign讓系統的升級維護變得方便