注意:自v3.5.0开始远程调用方式更新为如下方式

当新建的微服务模块需要提供给内部其他模块使用时,可新建kems-api模块和新建kems-api-xx模块,同时定义被调用的接口,消费模块引用kems-api-xx即可。

remoteRequest-1

配置类如下(需指定clients才能扫描到,也可以直接指定basePackages为包名扫描整个模块,但是会增加扫描时间【不建议】):

@EnableServiceClients(clients = {ApiClient.class, DictClient.class, MenuClient.class, OrgClient.class, ParamClient.class, RegionClient.class, RoleClient.class, UserClient.class})
public class ApiSystemAutoConfiguration {
}

具体请参考kems-api-system.jar中的声明及kems-dependency-system.jar中的实现。以kems-api-system为例,使用步骤如下。

1. 新建api模块

引入依赖,目录结构参考上图

  <dependency>
      <groupId>com.szkingdom.koca.base</groupId>
      <artifactId>koca-core</artifactId>
  </dependency>

  <dependency>
      <groupId>com.szkingdom.koca.base</groupId>
      <artifactId>koca-client</artifactId>
      <optional>true</optional>
  </dependency>

  <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.22</version>
      <scope>compile</scope>
  </dependency>

2. 接口声明

新建UserClient.java并声明所需接口,@PostMapping中额外添加/rpc以区分用途(虽然也可以直接调用)

  • 注意:同模块的接口要分多个Client存放时,@ServiceClient的name同为服务名,alias不能和其他的重复!
  @ServiceClient(name = "module-system", alias = "userClient")
  public interface UserClient {
      /**
       * 新增用户
       *
       * @param sysUserInfoParam 用户信息
       * @return 用户信息
       */
      @PostMapping("/user/rpc/save")
      Result<SysUserDTO> addUser(@RequestBody SysUserInfoParam sysUserInfoParam);
  }

3. 接口实现

在原始接口模块(一般为module-xxx)新增rpc文件夹,用于存放UserClient的实现类UserClientImpl,并引入依赖

<dependency>
    <groupId>com.kingengine.kems.api</groupId>
    <artifactId>kems-api-system</artifactId>
</dependency>

远程接口实现参考如下:(逻辑等同于原Controller的逻辑,可直接copy过来稍作修改)

@RestController
@ApiIgnore
@Primary //添加@Primar, 确保在引入demo-provider-impl时不报bean冲突
public class UserClientImpl implements UserClient {
    @Resource
    private ISysUserService userService;

    /**
     * 新增用户
     *
     * @param sysUserInfoParam 用户信息
     * @return 用户信息
     */
    @Override
    public Result<SysUserDTO> addUser(SysUserInfoParam sysUserInfoParam) {
        SysUserAddParam param = new SysUserAddParam();
        BeanUtils.copyProperties(sysUserInfoParam, param);
        SysUser sysUser = userService.insertUser(param);
        SysUserDTO sysUserDTO = new SysUserDTO();
        BeanUtils.copyProperties(sysUser, sysUserDTO);
        return Result.success(BaseResultMessage.SUCCESS, sysUserDTO);
    }
}

4. 依赖集成

在需要远程调用的模块同样引入依赖:

<dependency>
    <groupId>com.kingengine.kems.api</groupId>
    <artifactId>kems-api-system</artifactId>
</dependency>

调用方式参考如下:

@Resource
UserClient userClient;

public void test() {
    SysUserInfoParam sysUserInfoParam = new SysUserInfoParam();
    SysUserDTO sysUserDTO = userClient.addUser(sysUserInfoParam).getBody();
}
Copyright © 2017-2023 深圳金证引擎科技有限公司 all right reserved,powered by Gitbook该文件最后修订时间: 2023-10-17 15:30:06

results matching ""

    No results matching ""