字段中主要有:
账户、应用程序ID、应用版本、载体、设备ID、设备类型、事件id、ip、纬度、经度、网络类型、操作系统名称、操作系统版本
属性:释放频道、分辨率、会话ID、时间戳
如下栏目所示
账户 | 应用程序ID | 应用版本 | 载体 | 设备ID | 设备类型 | 事件id | ip | 纬度 | 经度 | 网络类型 | 操作系统名称 | 操作系统版本 | 属性【释放频道、分辨率、会话ID、时间戳】 |
| | | | | | | | latitude | | | | | |
需求:实现业务数据发生动态变化的数据输出
一、工具搭建
创建一个名为“dynamic_rule_engine”的父工程maven项目、然后该该工程下创建一个名为“dynamic_rule_engine”作为子模块的maven项目,后面也可以用这个子模块做动态规则引擎
步骤实现
1、在父工程的pom文件引入依赖:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.doitedu</groupId>
<artifactId>yinew_marketing</artifactId>
<packaging>pom</packaging>
<version>1.0</version>
<modules>
<module>dynamic_rule_engine</module>
</modules>
<!-- 依赖下载国内镜像库 -->
<repositories>
<repository>
<id>nexus-aliyun</id>
<name>Nexus aliyun</name>
<layout>default</layout>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
<snapshots>
<enabled>false</enabled>
<updatePolicy>never</updatePolicy>
</snapshots>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</releases>
</repository>
</repositories>
<!-- maven插件下载国内镜像库 -->
<pluginRepositories>
<pluginRepository>
<id>ali-plugin</id>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<snapshots>
<enabled>false</enabled>
<updatePolicy>never</updatePolicy>
</snapshots>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</releases>
</pluginRepository>
</pluginRepositories>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.18</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.75</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 指定编译java的插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
2、子模块下的pom文件也引入文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>yinew_marketing</artifactId>
<groupId>cn.doitedu</groupId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<!--dynamic_rule_engine:动态规则引擎模块 -->
<artifactId>dynamic_rule_engine</artifactId>
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.11</version>
</dependency>
</dependencies>
</project>
3、在子模块编写bean类型
package cn.doitedu.dynamic_rule.pojo;
import lombok.*;
import java.util.Map;
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class LogBean {
private String account ;
private String appId ;
private String appVersion ;
private String carrier ;
private String deviceId ;
private String deviceType ;
private String ip ;
private double latitude ;
private double longitude ;
private String netType ;
private String osName ;
private String osVersion ;
private String releaseChannel ;
private String resolution ;
private String sessionId ;
private long timeStamp ;
private String eventId ;
private Map<String,String> properties;
}
4、编写模拟生成模拟器
package cn.doitedu.dynamic_rule.datagen;
import cn.doitedu.dynamic_rule.pojo.LogBean;
import com.alibaba.fastjson.JSON;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.RandomUtils;
import org.apache.commons.lang3.StringUtils;
import java.util.HashMap;
/**
* @date 2021-06-19
* @desc 行为日志生成模拟器
*
*/
public class ActionLogGen {
public static void main(String[] args) throws Exception{
while (true){
LogBean logBean=new LogBean();
String account = StringUtils.leftPad(RandomUtils.nextInt(1, 10000) + "", 6, "0");
logBean.setAccount(account);
logBean.setAppId("cn.doitedu.yinew");
logBean.setAppVersion("2.5");
logBean.setCarrier("中国移动");
logBean.setDeviceId(account);
logBean.setIp("10.102.16.88");
logBean.setLatitude(RandomUtils.nextDouble(10.0, 52.0));
logBean.setLongitude(RandomUtils.nextDouble(120.0, 160.0));
logBean.setDeviceType("mi6");
logBean.setNetType("5G");
logBean.setOsName("android");
logBean.setOsVersion("7.5");
logBean.setReleaseChannel("小米应用市场");
logBean.setResolution("2048*1024");
logBean.setEventId(RandomStringUtils.randomAlphabetic(1));
HashMap<String, String> properties = new HashMap<String, String>();
for (int i = 0; i < RandomUtils.nextInt(1, 5); i++) {
// 生成的属性形如: p1=v3, p2=v5, p3=v3,......
properties.put("p"+RandomUtils.nextInt(1,10),"v"+RandomUtils.nextInt(1,10));
}
logBean.setProperties(properties);
logBean.setTimeStamp(System.currentTimeMillis());
logBean.setSessionId(RandomStringUtils.randomNumeric(10, 10));
// 将日志对象,转成JSON
String log = JSON.toJSONString(logBean);
System.out.println(log);
Thread.sleep(RandomUtils.nextInt(500,3000));
}
}
}
运行 ActionLogGen类程序,控制台打印输出【无限流打印】