Jhipster 微服務與微服務相互呼叫
阿新 • • 發佈:2019-01-06
現有兩個微服務A和B,A負責管理使用者資訊,B負責角色管理。
(1)A服務傳送請求,繫結角色,B服務收到請求後,呼叫A服務查詢使用者是否存在,判斷使用者是否重複繫結,條件通過則繫結使用者,最後反饋資訊給A服務
(2)A服務傳送請求獲取自己所有的許可權,B服務收到請求後,呼叫A服務查詢使用者是否存在,存在則查詢資料反饋資訊給A服務
上面兩個例子將使用者和角色進行解耦,兩者相互通訊,那麼微服務與微服務之間如何實現相互通訊,這裡將用一個簡單的例子來說明。
1、在B服務的controller中新增Rest方法,為A服務提供呼叫
@GetMapping(value = "/roles/getRoles/{userID}") @Timed public ResponseEntity getRolesByUserID(@PathVariable(value = "userID") Long userID){ log.debug("REST request to get Roles by UserID : {}", userID); //這裡演示不做驗證,直接New一個 Role返回Name Role role = new Role(); role.setName("超級管理員"); return new ResponseEntity(role.getName(),HttpStatus.OK); }
2、在A服務中宣告一個介面,在介面中新增B服務中Controller的Rest方法
@AuthorizedFeignClient(name = "b")
,指定與哪個微服務通訊
import cn.netbank.cloud.app.client.AuthorizedFeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @AuthorizedFeignClient(name = "b") public interface UserClient { @GetMapping(value = "/api/roles/getRoles/{userID}") String getRolesByUserID(@PathVariable(value = "userID") Long userID); }
3、在A服務的Controller中注入UserClient
@Resource
private UserClient userClient;
4、在A服務中的Controller的編寫Rest方法
@GetMapping(value = "/users/getRoles/{userID}") @Timed public ResponseEntity getRolesByUserID(@PathVariable(value ="userID") Long userID){ log.debug("REST request to Get Roles : {}", userID); //呼叫介面中的方法 String roleName = userClient.getRolesByUserID(userID); return new ResponseEntity(roleName,HttpStatus.OK); }
5、在swagger ui中除錯