diff --git a/README.md b/README.md
index 9efdc83..31eb77a 100644
--- a/README.md
+++ b/README.md
@@ -13,7 +13,7 @@ datarangers-sdk-java 是 [DataFinder](https://www.volcengine.com/product/datafin
com.datarangers
datarangers-sdk-core
- 1.5.12-release
+ 1.5.13-release
```
diff --git a/datarangers-sdk-core/pom.xml b/datarangers-sdk-core/pom.xml
index 2073e14..2930515 100644
--- a/datarangers-sdk-core/pom.xml
+++ b/datarangers-sdk-core/pom.xml
@@ -5,7 +5,7 @@
datarangers-sdk
com.datarangers
- 1.5.12-release
+ 1.5.13-release
4.0.0
jar
diff --git a/datarangers-sdk-core/src/main/java/com/datarangers/asynccollector/Consumer.java b/datarangers-sdk-core/src/main/java/com/datarangers/asynccollector/Consumer.java
index 8210d27..2e01048 100644
--- a/datarangers-sdk-core/src/main/java/com/datarangers/asynccollector/Consumer.java
+++ b/datarangers-sdk-core/src/main/java/com/datarangers/asynccollector/Consumer.java
@@ -17,6 +17,8 @@
import org.slf4j.LoggerFactory;
import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
public class Consumer implements Runnable {
@@ -64,8 +66,18 @@ private void sendBatch() throws Exception {
List messages = collectorContainer.consume(sdkConfigProperties.getBatchSize(),
sdkConfigProperties.getWaitTimeMs());
if (messages != null && messages.size() > 0) {
- MessageSenderFactory.getMessageSender(messages.get(0))
- .sendBatch(messages, this.sdkConfigProperties);
+ // 根据appId 进行分组
+ Map> messagesMap =
+ messages.stream().collect(Collectors.groupingBy(n -> n.getAppMessage().getAppId()));
+ // 上报
+ for (Map.Entry> entry : messagesMap.entrySet()) {
+ List messageList = entry.getValue();
+ if(messageList != null && messageList.size() > 0) {
+ MessageSenderFactory.getMessageSender(messageList.get(0))
+ .sendBatch(messageList, this.sdkConfigProperties);
+ }
+ }
+
}
} catch (Throwable e) {
e.printStackTrace();
diff --git a/datarangers-sdk-core/src/main/java/com/datarangers/config/Constants.java b/datarangers-sdk-core/src/main/java/com/datarangers/config/Constants.java
index 5c1110c..c47d8d5 100644
--- a/datarangers-sdk-core/src/main/java/com/datarangers/config/Constants.java
+++ b/datarangers-sdk-core/src/main/java/com/datarangers/config/Constants.java
@@ -11,7 +11,7 @@
import java.util.GregorianCalendar;
public class Constants {
- public static final String SDK_VERSION = "datarangers_sdk_1.5.12-release";
+ public static final String SDK_VERSION = "datarangers_sdk_1.5.13-release";
public static DateTimeFormatter FULL_HOUR = DateTimeFormatter.ofPattern("yyyy-MM-dd-HH");
public static DateTimeFormatter FULL_DAY = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
public static final String APP_LOG_PATH = "/sdk/log";
diff --git a/datarangers-sdk-core/src/main/java/com/datarangers/config/DataRangersSDKConfigProperties.java b/datarangers-sdk-core/src/main/java/com/datarangers/config/DataRangersSDKConfigProperties.java
index 73a519b..8feb8d5 100644
--- a/datarangers-sdk-core/src/main/java/com/datarangers/config/DataRangersSDKConfigProperties.java
+++ b/datarangers-sdk-core/src/main/java/com/datarangers/config/DataRangersSDKConfigProperties.java
@@ -23,6 +23,7 @@ public class DataRangersSDKConfigProperties {
public String domain;
private String path;
+ private String batchPath;
private int threadCount = 20;
@@ -293,6 +294,14 @@ public void setPath(String path) {
this.path = path;
}
+ public String getBatchPath() {
+ return batchPath;
+ }
+
+ public void setBatchPath(String batchPath) {
+ this.batchPath = batchPath;
+ }
+
public ZoneOffset getTimeOffset() {
return timeOffset;
}
diff --git a/datarangers-sdk-core/src/main/java/com/datarangers/sender/MessageSender.java b/datarangers-sdk-core/src/main/java/com/datarangers/sender/MessageSender.java
index 53f3f00..c091810 100644
--- a/datarangers-sdk-core/src/main/java/com/datarangers/sender/MessageSender.java
+++ b/datarangers-sdk-core/src/main/java/com/datarangers/sender/MessageSender.java
@@ -20,10 +20,10 @@ public interface MessageSender {
/**
* 使用批量上报
- * @param message
+ * @param messages
* @param sdkConfigProperties
*/
- default void sendBatch(List message, DataRangersSDKConfigProperties sdkConfigProperties) {
+ default void sendBatch(List messages, DataRangersSDKConfigProperties sdkConfigProperties) {
throw new UnsupportedOperationException("Not support batch");
};
}
diff --git a/datarangers-sdk-core/src/main/java/com/datarangers/sender/MessageSenderFactory.java b/datarangers-sdk-core/src/main/java/com/datarangers/sender/MessageSenderFactory.java
index 230bbb1..aa8c6d0 100644
--- a/datarangers-sdk-core/src/main/java/com/datarangers/sender/MessageSenderFactory.java
+++ b/datarangers-sdk-core/src/main/java/com/datarangers/sender/MessageSenderFactory.java
@@ -4,6 +4,7 @@
import com.datarangers.message.MessageEnv;
import com.datarangers.message.MessageType;
import com.datarangers.sender.saas.SaasItemAppMessageSender;
+import com.datarangers.sender.saas.SaasMessageSender;
import com.datarangers.sender.saas.SaasProfileAppMessageSender;
import com.datarangers.sender.saas.SaasServerAppMessageSender;
import com.datarangers.sender.saasnative.SaasNativeMessageSender;
@@ -25,16 +26,7 @@ public static MessageSender getMessageSender(Message message) {
if (MessageEnv.SAAS_NATIVE == messageEnv) {
return new SaasNativeMessageSender();
}
- MessageType messageType = message.getMessageType();
- switch (messageType) {
- case EVENT:
- return new SaasServerAppMessageSender();
- case ITEM:
- return new SaasItemAppMessageSender();
- case PROFILE:
- return new SaasProfileAppMessageSender();
- default:
- throw new IllegalArgumentException("Not support message: " + messageType);
- }
+ // saas
+ return new SaasMessageSender();
}
}
diff --git a/datarangers-sdk-core/src/main/java/com/datarangers/sender/PrivatizationMessageSender.java b/datarangers-sdk-core/src/main/java/com/datarangers/sender/PrivatizationMessageSender.java
index c69156e..e0a8993 100644
--- a/datarangers-sdk-core/src/main/java/com/datarangers/sender/PrivatizationMessageSender.java
+++ b/datarangers-sdk-core/src/main/java/com/datarangers/sender/PrivatizationMessageSender.java
@@ -23,8 +23,8 @@ public void send(Message message, DataRangersSDKConfigProperties sdkConfigProper
}
@Override
- public void sendBatch(List message, DataRangersSDKConfigProperties sdkConfigProperties) {
- List sendMessages = message.stream().map(n -> n.getAppMessage()).collect(Collectors.toList());
+ public void sendBatch(List messages, DataRangersSDKConfigProperties sdkConfigProperties) {
+ List sendMessages = messages.stream().map(n -> n.getAppMessage()).collect(Collectors.toList());
HttpUtils.post(EventConfig.getAppListUrl(), RangersJSONConfig.getInstance().toJson(sendMessages), EventConfig.SEND_HEADER);
}
}
diff --git a/datarangers-sdk-core/src/main/java/com/datarangers/sender/saas/SaasItemAppMessageSender.java b/datarangers-sdk-core/src/main/java/com/datarangers/sender/saas/SaasItemAppMessageSender.java
index 626640a..b4c89bd 100644
--- a/datarangers-sdk-core/src/main/java/com/datarangers/sender/saas/SaasItemAppMessageSender.java
+++ b/datarangers-sdk-core/src/main/java/com/datarangers/sender/saas/SaasItemAppMessageSender.java
@@ -50,4 +50,12 @@ public void send(Message message, DataRangersSDKConfigProperties sdkConfigProper
}
}
+
+ @Override
+ public void sendBatch(List message, DataRangersSDKConfigProperties sdkConfigProperties) {
+ // 接口不支持批量,这里循环处理
+ for (Message m : message) {
+ send(m, sdkConfigProperties);
+ }
+ }
}
diff --git a/datarangers-sdk-core/src/main/java/com/datarangers/sender/saas/SaasMessageSender.java b/datarangers-sdk-core/src/main/java/com/datarangers/sender/saas/SaasMessageSender.java
new file mode 100644
index 0000000..48c9172
--- /dev/null
+++ b/datarangers-sdk-core/src/main/java/com/datarangers/sender/saas/SaasMessageSender.java
@@ -0,0 +1,53 @@
+package com.datarangers.sender.saas;
+
+import com.datarangers.config.DataRangersSDKConfigProperties;
+import com.datarangers.message.Message;
+import com.datarangers.message.MessageType;
+import com.datarangers.sender.MessageSender;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @author zhangpeng.spin
+ */
+public class SaasMessageSender implements MessageSender {
+ private Map senders = new HashMap<>();
+
+ public SaasMessageSender() {
+ senders.put(MessageType.EVENT, new SaasServerAppMessageSender());
+ senders.put(MessageType.PROFILE, new SaasProfileAppMessageSender());
+ senders.put(MessageType.ITEM, new SaasItemAppMessageSender());
+ }
+
+ @Override
+ public void send(Message message, DataRangersSDKConfigProperties sdkConfigProperties) {
+ MessageSender messageSender = doGetSender(message.getMessageType());
+ messageSender.send(message, sdkConfigProperties);
+ }
+
+ @Override
+ public void sendBatch(List messages, DataRangersSDKConfigProperties sdkConfigProperties) {
+ // 根据类型进行分组
+ Map> messageListMap =
+ messages.stream().collect(Collectors.groupingBy(Message::getMessageType));
+ for (Map.Entry> entry : messageListMap.entrySet()) {
+ List messageList = entry.getValue();
+ if (messageList == null || messageList.isEmpty()) {
+ continue;
+ }
+ MessageSender messageSender = doGetSender(entry.getKey());
+ messageSender.sendBatch(messageList, sdkConfigProperties);
+ }
+ }
+
+ protected MessageSender doGetSender(MessageType messageType) {
+ MessageSender messageSender = senders.get(messageType);
+ if (messageSender == null) {
+ throw new IllegalArgumentException("Not support message: " + messageType);
+ }
+ return messageSender;
+ }
+}
diff --git a/datarangers-sdk-core/src/main/java/com/datarangers/sender/saas/SaasProfileAppMessageSender.java b/datarangers-sdk-core/src/main/java/com/datarangers/sender/saas/SaasProfileAppMessageSender.java
index a2f6adb..826ca5e 100644
--- a/datarangers-sdk-core/src/main/java/com/datarangers/sender/saas/SaasProfileAppMessageSender.java
+++ b/datarangers-sdk-core/src/main/java/com/datarangers/sender/saas/SaasProfileAppMessageSender.java
@@ -11,6 +11,7 @@
import com.datarangers.util.AuthUtils;
import com.datarangers.util.HttpUtils;
import java.util.LinkedHashMap;
+import java.util.List;
import java.util.Map;
/**
@@ -42,4 +43,12 @@ public void send(Message message, DataRangersSDKConfigProperties sdkConfigProper
}
+ @Override
+ public void sendBatch(List message, DataRangersSDKConfigProperties sdkConfigProperties) {
+ // 接口不支持批量,这里循环处理
+ for (Message m : message) {
+ send(m, sdkConfigProperties);
+ }
+ }
+
}
diff --git a/datarangers-sdk-core/src/main/java/com/datarangers/sender/saas/SaasServerAppMessageSender.java b/datarangers-sdk-core/src/main/java/com/datarangers/sender/saas/SaasServerAppMessageSender.java
index 829a8cc..620897e 100644
--- a/datarangers-sdk-core/src/main/java/com/datarangers/sender/saas/SaasServerAppMessageSender.java
+++ b/datarangers-sdk-core/src/main/java/com/datarangers/sender/saas/SaasServerAppMessageSender.java
@@ -8,8 +8,11 @@
import com.datarangers.message.saas.SaasServerAppMessage;
import com.datarangers.sender.MessageSender;
import com.datarangers.util.HttpUtils;
+
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
+import java.util.stream.Collectors;
/**
* @Author zhangpeng.spin@bytedance.com
@@ -17,32 +20,52 @@
*/
public class SaasServerAppMessageSender implements MessageSender {
- private static final String path = "/v2/event/json";
-
- @Override
- public void send(Message message, DataRangersSDKConfigProperties sdkConfigProperties) {
- Object sendMessage = new SaasServerAppMessage(message);
- String url = sdkConfigProperties.getDomain() + getPath(sdkConfigProperties);
- Map headers = new HashMap<>();
- headers.putAll(EventConfig.SEND_HEADER);
- Integer appId = message.getAppMessage().getAppId();
- Map appKeys = sdkConfigProperties.getAppKeys();
- String appKey = appKeys.get(appId);
- if(appKey == null){
- throw new IllegalArgumentException("App key cannot be empty. app_id: " + appId);
+ private static final String PATH = "/v2/event/json";
+
+ private static final String BATCH_PATH = "/v2/event/list";
+
+ @Override
+ public void send(Message message, DataRangersSDKConfigProperties sdkConfigProperties) {
+ Object sendMessage = new SaasServerAppMessage(message);
+ String url = sdkConfigProperties.getDomain() + getPath(sdkConfigProperties.getPath(), PATH);
+ Map headers = new HashMap<>();
+ headers.putAll(EventConfig.SEND_HEADER);
+ Integer appId = message.getAppMessage().getAppId();
+ Map appKeys = sdkConfigProperties.getAppKeys();
+ String appKey = appKeys.get(appId);
+ if (appKey == null) {
+ throw new IllegalArgumentException("App key cannot be empty. app_id: " + appId);
+ }
+ headers.put(Constants.APP_KEY, appKey);
+ HttpUtils.post(url, RangersJSONConfig.getInstance().toJson(sendMessage), headers);
}
- headers.put(Constants.APP_KEY, appKey);
- HttpUtils.post(url, RangersJSONConfig.getInstance().toJson(sendMessage), headers);
- }
-
- protected String getPath(DataRangersSDKConfigProperties sdkConfigProperties) {
- String domainPath = sdkConfigProperties.getPath();
- if (domainPath == null || domainPath.trim().length() == 0) {
- return path;
+
+ @Override
+ public void sendBatch(List messages, DataRangersSDKConfigProperties sdkConfigProperties) {
+ List sendMessages = messages.stream().map(n -> new SaasServerAppMessage(n))
+ .collect(Collectors.toList());
+ String url = sdkConfigProperties.getDomain() + getPath(sdkConfigProperties.getBatchPath(), BATCH_PATH);
+
+ Map headers = new HashMap<>();
+ headers.putAll(EventConfig.SEND_HEADER);
+ Integer appId = messages.get(0).getAppMessage().getAppId();
+ Map appKeys = sdkConfigProperties.getAppKeys();
+ String appKey = appKeys.get(appId);
+ if (appKey == null) {
+ throw new IllegalArgumentException("App key cannot be empty. app_id: " + appId);
+ }
+ headers.put(Constants.APP_KEY, appKey);
+ String body = RangersJSONConfig.getInstance().toJson(sendMessages);
+ HttpUtils.post(url, body, headers);
}
- if (!domainPath.startsWith("/")) {
- domainPath = "/" + domainPath;
+
+ protected String getPath(String domainPath, String defaultPath) {
+ if (domainPath == null || domainPath.trim().length() == 0) {
+ return defaultPath;
+ }
+ if (!domainPath.startsWith("/")) {
+ domainPath = "/" + domainPath;
+ }
+ return domainPath;
}
- return domainPath;
- }
}
diff --git a/datarangers-sdk-core/src/main/java/com/datarangers/sender/saasnative/SaasNativeMessageSender.java b/datarangers-sdk-core/src/main/java/com/datarangers/sender/saasnative/SaasNativeMessageSender.java
index 0832643..4c053d1 100644
--- a/datarangers-sdk-core/src/main/java/com/datarangers/sender/saasnative/SaasNativeMessageSender.java
+++ b/datarangers-sdk-core/src/main/java/com/datarangers/sender/saasnative/SaasNativeMessageSender.java
@@ -28,9 +28,10 @@ public void send(Message message, DataRangersSDKConfigProperties sdkConfigProper
}
@Override
- public void sendBatch(List message, DataRangersSDKConfigProperties sdkConfigProperties) {
- Map headers = getHeaders(message.get(0), sdkConfigProperties);
- List sendMessages = message.stream().map(n -> getSassNativeMessage(n)).collect(Collectors.toList());
+ public void sendBatch(List messages, DataRangersSDKConfigProperties sdkConfigProperties) {
+ Map headers = getHeaders(messages.get(0), sdkConfigProperties);
+ List sendMessages =
+ messages.stream().map(n -> getSassNativeMessage(n)).collect(Collectors.toList());
HttpUtils.post(EventConfig.getAppListUrl(), RangersJSONConfig.getInstance().toJson(sendMessages), headers);
}
diff --git a/datarangers-sdk-example/pom.xml b/datarangers-sdk-example/pom.xml
index ba9490a..c4e01a4 100644
--- a/datarangers-sdk-example/pom.xml
+++ b/datarangers-sdk-example/pom.xml
@@ -5,7 +5,7 @@
datarangers-sdk
com.datarangers
- 1.5.12-release
+ 1.5.13-release
com.datarangers
datarangers-sdk-example
diff --git a/datarangers-sdk-example/src/main/java/com/datarangers/example/AbstractSdkExample.java b/datarangers-sdk-example/src/main/java/com/datarangers/example/AbstractSdkExample.java
index 6637443..02619d2 100644
--- a/datarangers-sdk-example/src/main/java/com/datarangers/example/AbstractSdkExample.java
+++ b/datarangers-sdk-example/src/main/java/com/datarangers/example/AbstractSdkExample.java
@@ -260,14 +260,12 @@ public void sendItemProfile(int appId) {
.setName("Java")
.setPrice(100)
.setPublishDate("2010-10-11")
- .setAuthors(Arrays.asList("zhangsan", "lisi"))
.setCategory("1"));
items.add(
new BookItem("1002", "book")
.setName("PHP")
.setPrice(100)
.setPublishDate("2021-07-20")
- .setAuthors(Arrays.asList("zhangsan", "wanger"))
.setCategory("2"));
appEventCollector.itemSet(appId, "book", items);
diff --git a/datarangers-sdk-example/src/main/java/com/datarangers/example/BatchSaasNativeSdkExample.java b/datarangers-sdk-example/src/main/java/com/datarangers/example/BatchSaasNativeSdkExample.java
new file mode 100644
index 0000000..c3b18ff
--- /dev/null
+++ b/datarangers-sdk-example/src/main/java/com/datarangers/example/BatchSaasNativeSdkExample.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright 2020 Beijing Volcano Engine Technology Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed
+ * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for
+ * the specific language governing permissions and limitations under the License.
+ */
+
+package com.datarangers.example;
+
+import com.datarangers.collector.AppEventCollector;
+import com.datarangers.collector.EventCollector;
+import com.datarangers.config.Constants;
+import com.datarangers.config.DataRangersSDKConfigProperties;
+import com.datarangers.config.SdkMode;
+
+/**
+ * HTTP模式的特殊场景,当跨网络传输,http 时延比较大的场景,可以使用批量上报的方式来提高性能
+ *
+ * @Author zhangpeng.spin@bytedance.com
+ * @Date 2022/9/28
+ */
+public class BatchSaasNativeSdkExample extends AbstractSdkExample {
+ private EventCollector appEventCollector;
+ private EventCollector webEventCollector;
+ private EventCollector mpEventCollector;
+
+ BatchSaasNativeSdkExample() {
+ DataRangersSDKConfigProperties properties = new DataRangersSDKConfigProperties();
+ // 设置模式
+ properties.setEnv(Constants.ENV_SAAS_NATIVE);
+ properties.setMode(SdkMode.HTTP);
+
+ // 设置domain和appKey
+ properties.setDomain("https://gator.volces.com");
+
+ // 可以设置多个app,这里注意替换成真实的参数
+ properties.getAppKeys().put(Integer.valueOf(System.getenv("SDK_APP_1")), System.getenv("SDK_APP_KEY_1"));
+ properties.getAppKeys().put(Integer.valueOf(System.getenv("SDK_APP_2")), System.getenv("SDK_APP_KEY_2"));
+
+ // 设置batch
+ properties.setSendBatch(true);
+
+ // 可以根据需要进行调试batchSize,一般使用默认的即可
+ // properties.setBatchSize(20);
+ // properties.setWaitTimeMs(100);
+
+ // 初始化collector
+ appEventCollector = new AppEventCollector("app", properties);
+ webEventCollector = new AppEventCollector("web", properties);
+ mpEventCollector = new AppEventCollector("mp", properties);
+ }
+
+
+ @Override
+ public EventCollector getAppEventCollector() {
+ return appEventCollector;
+ }
+
+ @Override
+ public EventCollector getWebEventCollector() {
+ return webEventCollector;
+ }
+
+ @Override
+ public EventCollector getMpEventCollector() {
+ return mpEventCollector;
+ }
+
+ public static void main(String[] args) {
+ BatchSaasNativeSdkExample sdkExample = new BatchSaasNativeSdkExample();
+ String userUniqueId1 = "test_sdk_user_app111";
+ String userUniqueId2 = "test_sdk_user_app222";
+
+ int appId1 = Integer.valueOf(System.getenv("SDK_APP_1"));
+ int appId2 = Integer.valueOf(System.getenv("SDK_APP_2"));
+
+ for (int i = 0; i < 5; i++) {
+ // 发送事件,时间发生时间为send方法调用的时间
+ sdkExample.sendEvent(userUniqueId1, appId1);
+ sdkExample.sendEvent(userUniqueId2, appId2);
+
+ sdkExample.senEventWithAbSdk(userUniqueId1, appId1);
+ sdkExample.senEventWithAbSdk(userUniqueId2, appId2);
+
+ sdkExample.sendUserProfile(userUniqueId1, appId1);
+ sdkExample.sendUserProfile(userUniqueId2, appId2);
+
+ // 指定localTimeMs时间,即事件发生时间
+ sdkExample.sendEventWithLocalTimeMs(userUniqueId1, appId1, System.currentTimeMillis());
+ sdkExample.sendEventWithLocalTimeMs(userUniqueId2, appId2, System.currentTimeMillis());
+ }
+
+ }
+}
diff --git a/datarangers-sdk-example/src/main/java/com/datarangers/example/BatchSaasSdkExample.java b/datarangers-sdk-example/src/main/java/com/datarangers/example/BatchSaasSdkExample.java
new file mode 100644
index 0000000..5a91094
--- /dev/null
+++ b/datarangers-sdk-example/src/main/java/com/datarangers/example/BatchSaasSdkExample.java
@@ -0,0 +1,113 @@
+/*
+ * Copyright 2020 Beijing Volcano Engine Technology Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed
+ * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for
+ * the specific language governing permissions and limitations under the License.
+ */
+
+package com.datarangers.example;
+
+import com.datarangers.collector.AppEventCollector;
+import com.datarangers.collector.EventCollector;
+import com.datarangers.config.DataRangersSDKConfigProperties;
+import com.datarangers.config.SdkMode;
+
+/**
+ * HTTP模式的特殊场景,当跨网络传输,http 时延比较大的场景,可以使用批量上报的方式来提高性能
+ *
+ * @Author zhangpeng.spin@bytedance.com
+ * @Date 2022/9/28
+ */
+public class BatchSaasSdkExample extends AbstractSdkExample {
+ private EventCollector appEventCollector;
+ private EventCollector webEventCollector;
+ private EventCollector mpEventCollector;
+
+ BatchSaasSdkExample() {
+ DataRangersSDKConfigProperties properties = new DataRangersSDKConfigProperties();
+ // 设置模式
+ properties.setMode(SdkMode.HTTP);
+
+ // 设置domain和appKey
+ properties.setDomain("https://mcs.ctobsnssdk.com");
+
+ // 可以设置多个app,这里注意替换成真实的参数
+ properties.getAppKeys().put(Integer.valueOf(System.getenv("SDK_APP_1")), System.getenv("SDK_APP_KEY_1"));
+ properties.getAppKeys().put(Integer.valueOf(System.getenv("SDK_APP_2")), System.getenv("SDK_APP_KEY_2"));
+
+
+ // 设置openapi domain, AK,SK,这里注意替换成真实的参数
+ properties.getOpenapiConfig().setDomain("https://analytics.volcengineapi.com");
+ properties.getOpenapiConfig().setAk(System.getenv("OPENAPI_AK"));
+ properties.getOpenapiConfig().setSk(System.getenv("OPENAPI_SK"));
+
+ // 设置batch
+ properties.setSendBatch(true);
+
+ // 可以根据需要进行调试batchSize,一般使用默认的即可
+ // properties.setBatchSize(20);
+ // properties.setWaitTimeMs(100);
+
+ // 初始化collector
+ appEventCollector = new AppEventCollector("app", properties);
+ webEventCollector = new AppEventCollector("web", properties);
+ mpEventCollector = new AppEventCollector("mp", properties);
+ }
+
+
+ @Override
+ public EventCollector getAppEventCollector() {
+ return appEventCollector;
+ }
+
+ @Override
+ public EventCollector getWebEventCollector() {
+ return webEventCollector;
+ }
+
+ @Override
+ public EventCollector getMpEventCollector() {
+ return mpEventCollector;
+ }
+
+ public static void main(String[] args) {
+ BatchSaasSdkExample sdkExample = new BatchSaasSdkExample();
+ String userUniqueId1 = "test_sdk_user_app111";
+ String userUniqueId2 = "test_sdk_user_app222";
+
+ int appId1 = Integer.valueOf(System.getenv("SDK_APP_1"));
+ int appId2 = Integer.valueOf(System.getenv("SDK_APP_2"));
+
+ for (int i = 0; i < 5; i++) {
+ // 发送事件,时间发生时间为send方法调用的时间
+ sdkExample.sendEvent(userUniqueId1, appId1);
+ sdkExample.sendEvent(userUniqueId2, appId2);
+
+ sdkExample.senEventWithAbSdk(userUniqueId1, appId1);
+ sdkExample.senEventWithAbSdk(userUniqueId2, appId2);
+
+ // 上报用户属性,需要保证先在系统新增用户属性
+ sdkExample.sendUserProfile(userUniqueId1, appId1);
+ sdkExample.sendUserProfile(userUniqueId2, appId2);
+
+ // 指定localTimeMs时间,即事件发生时间
+ sdkExample.sendEventWithLocalTimeMs(userUniqueId1, appId1, System.currentTimeMillis());
+ sdkExample.sendEventWithLocalTimeMs(userUniqueId2, appId2, System.currentTimeMillis());
+
+ // item 为book,需要先创建,item 属性, item相关的属性也需要定义
+ sdkExample.sendItemProfile(appId1);
+ sdkExample.sendItemProfile(appId2);
+
+ // 事件with item,item 为book,需要先创建
+ sdkExample.sendEventWithItem(userUniqueId1, appId1);
+ sdkExample.sendEventWithItem(userUniqueId2, appId2);
+ }
+
+ }
+}
diff --git a/datarangers-sdk-starter/pom.xml b/datarangers-sdk-starter/pom.xml
index 63b6a4f..9cc9bcb 100644
--- a/datarangers-sdk-starter/pom.xml
+++ b/datarangers-sdk-starter/pom.xml
@@ -6,7 +6,7 @@
com.datarangers
datarangers-sdk
- 1.5.12-release
+ 1.5.13-release
jar
datarangers-sdk-starter
diff --git a/pom.xml b/pom.xml
index c8837d3..ed08195 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
com.datarangers
datarangers-sdk
pom
- 1.5.12-release
+ 1.5.13-release
datarangers-sdk-core
datarangers-sdk-starter