1. 優勢
可以使用maven 進行訪問,實現代碼的共享,減少跨服務調用服務編寫的問題
2. 使用
定義接口
publicinterfaceIUserService{
@RequestMapping(method =RequestMethod.GET, value ="/users/app",headers={"tenantid"})
@ApiOperation(value ="發送短信通知",httpMethod ="GET", response =User.class,notes ="請保證傳入字段正確")
User getUser(@RequestParam("id")String id,@RequestHeader("tenantid")String tenantid);
@RequestMapping(method =RequestMethod.GET, value ="/users/app2")
User getUser2();
@RequestMapping(method =RequestMethod.GET, value ="/users/app3")
User getUser3();
@RequestMapping(method =RequestMethod.POST, value ="/users/app3")
User getUser4(@RequestBodyUser users);
}
spring mvc rest 接口實現
@RestController
publicclassUserServiceFeignControllerimplementsIUserService{
@Autowired
privateUserserviceImpl userserviceImpl;
@Override
publicUser getUser2(){
// TODO Auto-generated method stub
return userserviceImpl.getUser2();
}
@Override
publicUser getUser3(){
// TODO Auto-generated method stub
return userserviceImpl.getUser3();
}
@Override
publicUser getUser(String id,@RequestHeader("tenantid")String tenantid){
// TODO Auto-generated method stub
return userserviceImpl.getUser(id, tenantid);
}
@Override
publicUser getUser4(User users){
// TODO Auto-generated method stub
return users;
}
}
feign 跨服務調用
@FeignClient(url="http://localhost:8089/",name="userservicecall")
publicinterfaceIFeignUserServiceextendsIUserService{
}
注解
@SpringBootApplication
@EnableFeignClients()
publicclassApplication{
publicstaticvoid main(String[] args){
SpringApplication.run(Application.class, args);
}
}
調用
@RestController
publicclassUserCacheController{
@Autowired
privateIFeignUserService userservice;
@RequestMapping(value ="/demo1", method =RequestMethod.GET)
publicObject importUser(String id,@RequestHeader("tenantid")String tenantid)throwsExecutionException{
return userservice.getUser(id,tenantid);
}
}
3. 注意問題
盡管使用接口繼承,但是還是會發現部分參數是沒法繼承的類似 header 解決方法
調整rest 實現接口方法的簽名,如下:
@Override
publicUser getUser(String id,@RequestHeader("tenantid")String tenantid){
// TODO Auto-generated method stub
return userserviceImpl.getUser(id, tenantid);
}