1、首先在公共模塊demo-api中寫好接口
2、demo-api接口如下;
** “聲明式調用”就是定義一個公共的接口,由提供方來實現,消費方來調用 消費方直接注入此接口,調方法 用FeignClient注解綁定一個提供方的服務名,如 @FeignClient("SIMPLE-PROVIDER"),前提是提供方已經把服務注冊到注冊中心了 注意: 1、接口里的參數前面一定要加注解 如“@RequestParam("id") String id、@RequestBody SimpleUser user” 2、接口要符合Restful風格的規范
3、在provider中進行接口的實現,前提是provider模塊已經作為一個服務發布了。
** 服務提供方 實現服務api接口,提供服務,盡量簡潔,推薦一個類搞定 微服務分三層 原子層,服務的最底層,是服務的最小單元,往往直接操作數據庫 聚合層,把原子層的接口組織起來進行分類 應用層,調用聚合層,處理業務邏輯 本服務屬於原子層
4、對於接口的調用,消費者可以采用兩種方式
一、采用feign聲明式調用
二、采用restTemplate直接調用(有多種方式)
@RestController public class DemoConsumerController { @Autowired //注入聲明式調用的接口(feign) private DemoApi api; @Autowired //注入客戶端負載均衡調用的bean(ribbon) private RestTemplate t; /** * feign聲明式調用 * @param name * @return */ @RequestMapping(value="/demo/hello") public String hello(String name) { return api.hello("hello world !"); } /** * ribbon負載均衡調用 * @param name * @return */ @RequestMapping(value="/demo/hello2") public String hello2(String name) { String result = t.getForEntity("http://DEMO-PROVIDER/demo/hello?name=test", String.class).getBody(); return result; } }
服務分三層 原子層,服務的最底層,是服務的最小單元,往往直接操作數據庫 聚合層,把原子層的接口組織起來進行分類 應用層,調用聚合層,處理業務邏輯 本服務屬於聚合層 + 應用層 feign方式,接口注入方式() ribbon,客戶端負載均衡方式()
5、restTemplate 對象需要在啟動類之前創建后,才可以在接口中注入,或者采用java配置類的方式
restTemplate 采用java配置類創建
RestTemplate調用服務的另外一種方法