liukx e64f217d2e 告警分组的核心代码 2 years ago
..
src 91c7e07306 告警分组的核心代码 3 years ago
README.md 00297861a9 调整页面 3 years ago
pom.xml e64f217d2e 告警分组的核心代码 2 years ago

README.md

客户端

使用方法

引入依赖

pom.xml

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

开启功能

SpringServerApplication

@EnableBackstageData

以上功能开启。

数据的传输格式

以Zuul网关为例 : ZuulDataFilter

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

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

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

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

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

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

实现ParamsGenerate 接口

参考案例:

@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类型。

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

数据依赖的问题


<dependency>
	<groupId>io.reactivex</groupId>
	<artifactId>rxnetty</artifactId>
	<version>0.4.20</version>
	<scope>runtime</scope>
	<exclusions>
		<exclusion>
			<artifactId>netty-common</artifactId>
			<groupId>io.netty</groupId>
		</exclusion>
	</exclusions>
</dependency>
<dependency>
	<groupId>com.elab.marketing</groupId>
	<artifactId>elab-marketing-core</artifactId>
	<version>1.0.0</version>
	<exclusions>
		<exclusion>
			<artifactId>rxnetty</artifactId>
			<groupId>io.reactivex</groupId>
		</exclusion>
	</exclusions>
</dependency>
<dependency>
	<groupId>io.netty</groupId>
	<artifactId>netty-all</artifactId>
	<version>4.1.5.Final</version>
</dependency>