1. 程式人生 > >Jhipster 微服務與微服務相互呼叫

Jhipster 微服務與微服務相互呼叫

現有兩個微服務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中除錯