# 一、概念介绍

ebuilder应用独立部署是以eb应用为粒度做的应用拆分，独立部署后拥有独立的网关路由、服务器和数据库。因此二开时需要注意传入appId，这样才能够访问到独立部署服务及数据库。

# 二、HTTP请求

    以ebuilder表单接口为例，默认的路由是：

> /api/ebuilder/form/xxxx

A应用独立部署后，如果要通过http请求到A应用服务器，需要带上A应用的appId。譬如appId是1234，那么调用独立部署的http请求路径是

> /api/ebuilder1234/form/xxx

# 三、RPC请求

以往@RpcReference注解来进行rpc调用，只能请求到固定的group上，无法实现动态调用到某个独立部署ebuilder服务上。 需要调整调用EB的RPC接口为独立部署调用方式， 兼容后续项目版本升级和后期项目使用中切换应用独立部署的需要

调用示例：

1. 引入jar包 (通过weaver-ebuilder-form-client可间接依赖带入):

```java
<dependency>
    <groupId>com.weaver</groupId>
    <artifactId>weaver-publishkit-api</artifactId>
</dependency>
```

2. 创建代理说明

```java
通过EB工具构建生成rpc接口的代理对象
com.weaver.publishkit.api.util.PublishKitRuntimeUtil#buildRpcService(java.lang.Class<T>, java.lang.String, java.lang.String)

/**
 * 构建生成rpc接口的代理对象实现泛化调用EB独立部署的需要
 * @param tClass 原始接口类
 * @param defaultRpcGroup 接口文档提供的默认分组
 * @param appId 当前操作的应用id - 用于独立部署请求到对应服务 该id必须和当前操作的表单id一致
 * @return 对应接口代理类
 * @param <T>
 */
public <T> T buildRpcService(Class<T> tClass, String defaultRpcGroup, String appId) {
	return this.buildRpcService(tClass, defaultRpcGroup, (String)null, appId);
}
```

##### [EB系统参数获取说明(如:appId, eb表单id-objId)](https://weapp.eteams.cn/build/techdoc/wdoc/index.html#/public/doc/4771f4ea-bf3d-403e-81c1-c2983e604b06)

3. 请求示例:

```java
/**
 * 原始调用示例
 * 直接通过架构@RpcReference请求调用
 */
@RpcReference(group = "ebuilderform")
private com.weaver.ebuilder.form.client.service.data.RemoteSimpleDataService remoteSimpleDataService;

remoteSimpleDataService.saveFormData(ebDataChangeReqDto);

/*******************************************************************************************/

/**
 * 需要切换调整为:
 * appId需要传入真实的应用ID，否则请求就会跑到错误的服务上。
 * 如果业务上和具体应用无关，可以传publishKitRuntimeUtil.getDefaultAppId()，来指明请求到默认ebuilder服务。效果同@RpcReference。
 * 1，注入构建类
 * 2，构建rpc代理类
 * 3，使用rpc代理类调用方法
 */
@Autowired
private PublishKitRuntimeUtil publishKitRuntimeUtil;

//  调用示例
public void test(String appId){
	RemoteSimpleDataService remoteSimpleDataService = publishKitRuntimeUtil.buildRpcService(RemoteSimpleDataService.class, "ebuilderform", appId);
	remoteSimpleDataService.saveFormData(ebDataChangeReqDto);
}
```

# 四、数据源请求

调用数据源接口查询独立部署应用数据时，入参中需要明确传入appId，比如：

```java
QueryDto queryDto = new QueryDto();
queryDto.setAppId(1234); // 这里要传入appId

dataSetService.getListDatas(SourceType.LOGIC, queryDto);
```
