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 接口實現
@RestControllerpublicclassUserServiceFeignControllerimplementsIUserService{@AutowiredprivateUserserviceImpl userserviceImpl;@OverridepublicUser getUser2(){// TODO Auto-generated method stubreturn userserviceImpl.getUser2();}@OverridepublicUser getUser3(){// TODO Auto-generated method stubreturn userserviceImpl.getUser3();}@OverridepublicUser getUser(String id,@RequestHeader("tenantid")String tenantid){// TODO Auto-generated method stubreturn userserviceImpl.getUser(id, tenantid);}@OverridepublicUser getUser4(User users){// TODO Auto-generated method stubreturn users;}}
feign 跨服務調用
@FeignClient(url="http://localhost:8089/",name="userservicecall")publicinterfaceIFeignUserServiceextendsIUserService{}
注解
@SpringBootApplication@EnableFeignClients()publicclassApplication{publicstaticvoid main(String[] args){SpringApplication.run(Application.class, args);}}
調用
@RestControllerpublicclassUserCacheController{@AutowiredprivateIFeignUserService userservice;@RequestMapping(value ="/demo1", method =RequestMethod.GET)publicObject importUser(String id,@RequestHeader("tenantid")String tenantid)throwsExecutionException{return userservice.getUser(id,tenantid);}}
3. 注意問題
盡管使用接口繼承,但是還是會發現部分參數是沒法繼承的類似 header 解決方法
調整rest 實現接口方法的簽名,如下:
@OverridepublicUser getUser(String id,@RequestHeader("tenantid")String tenantid){// TODO Auto-generated method stubreturn userserviceImpl.getUser(id, tenantid);}
