# 客户端

## 使用方法

### 引入依赖

**pom.xml**

```xml
<dependency>
    <groupId>com.elab.backstage</groupId>
    <artifactId>elab-backstage-client</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
```

### 开启功能

SpringServerApplication

```java
@EnableBackstageData
```

以上功能开启。







## 数据的传输格式

以Zuul网关为例 : `ZuulDataFilter`

该类会在启动的时候注入到SpringMVC中，作为数据拦截器。

拦截器的负责收集的数据内容: 

1. 入参
2. 出参
3. header
4. 请求格式
5. URL
6. ....

这部分的数据是统一收集的，但最终会经过**BaseMessageData**传输到服务端。

这里就涉及到传输的数据定位是否符合你的要求，如果不符合？

可以通过客户端自己实现`ParamsGenerate`接口，自己去组装好内部数据。

实现`ParamsGenerate` 接口

参考案例: 

```java
@Component
public class DefaultParamsGenerate implements ParamsGenerate {

    @Override
    public void postBusinessData(BaseMessageData baseMessageData) {
        Map<String, String> header = baseMessageData.getHeader();
        String elabEnvironment = header.get("elabenvironment");
        String elabProjectName = header.get("elabprojectname");
        String elabSystem = header.get("elabsystem");
        baseMessageData.setUserSystem(elabSystem);
        baseMessageData.setFrontProjectName(elabProjectName);
        baseMessageData.setUserDevice(elabEnvironment);
        String baseUrl = baseMessageData.getUrl();
        baseUrl = baseUrl.replace("//", "/");
        String serviceName = baseUrl.split("/")[1];
        String url = baseUrl.substring(baseUrl.indexOf(serviceName) + serviceName.length(), baseUrl.length());
        baseMessageData.setServiceName(serviceName);
        baseMessageData.setMsgId(header.get("_catrootmessageid"));
        baseMessageData.setUserIp(header.get("x-forwarded-for"));
        baseMessageData.setUrl(url);
    }
}

```

比如有一些消息编号、设备号、以及用户编号等等这些信息可能需要客户端自己去获取放入该传输类中。

### 其他网关接入

实现思路:

1. 设置一道拦截器
2. 自己组装header、request、body到`BaseMessageData`中
3. 通过数据传输器`TcpSocketSender`进行传输

## 数据传输器

**TcpSocketSender**

传输器传输的值必须继承`BaseMessage`，要指定`MsgTypeEnums`类型。

服务端会根据该类型找对应的处理器。

