事件批处理

云眼About 6 min

事件批处理

本主题介绍云眼灰度实验 Android SDK 如何使用事件处理器将决策和转换事件批处理到单个有效负载中,然后再将其发送到云眼。

云眼灰度实验全栈 Android SDKopen in new window 现在可以将决策和转化事件批处理到单个有效负载中,然后再将其发送到云眼灰度实验。这是通过称为事件处理器的新 SDK 组件实现的。

事件批处理的优点是,根据定义、配置和使用事件处理器的方式,减少对云眼灰度实验的出站请求数。这意味着,跟踪的展示次数和转化事件数量相同,网络流量就会减少。

在安卓 SDK 中,提供接口的实现和批处理事件。可以根据两个参数控制批处理:BatchEventProcessor``EventProcessor

  • 批大小:定义在发送到云眼灰度实验之前一起批处理的事件数。
  • 刷新间隔:定义应将任何批处理事件发送到事件调度程序以发送到云眼灰度实验的时间量。

当批大小达到指定的限制或刷新间隔达到指定的时间限制时,将发送由批处理有效负载组成的事件。 下面将更详细地介绍选项。配置事件调度程序BatchEventProcessor

📘 注意

我们的 Android SDK 中的默认事件调度程序使用 Android Intent 服务open in new window来调度批处理请求。因此,由于系统对这些请求的限制,开发者可能会发现出站请求超出指定刷新间隔的其他延迟。

云眼灰度实验的事件批处理可与开箱即用和自定义事件调度程序配合使用。

事件批处理过程不会从事件中删除任何个人身份信息 (PII)。仍必须确保不会向云眼发送任何不必要的 PII。

基本示例

KotlinJava

val eyeofcloudManager = EyeofcloudManager.builder() .withSDKKey("<Your_SDK_Key>") .build(context) val eyeofcloud = eyeofcloudManager.initialize(context, R.raw.datafile)

EyeofcloudManager eyeofcloudManager = EyeofcloudManager.builder() .withSDKKey("<Your_SDK_Key>") .build(context); EyeofcloudClient eyeofcloud = eyeofcloudManager.initialize(context, R.raw.datafile);

默认情况下,批大小为 10,刷新间隔为 30 秒。

高级示例

KotlinJava

val eventHandler: EventHandler = DefaultEventHandler.getInstance(context) // Here we are using the builder options to set batch size // to 5 events and flush interval to a minute. val batchProcessor = BatchEventProcessor.builder() .withBatchSize(5) .withEventHandler(eventHandler) .withFlushInterval(TimeUnit.MINUTES.toMillis(1L)) .build() val eyeofcloudManager = EyeofcloudManager.builder() .withSDKKey("<Your_SDK_Key>") .withEventHandler(eventHandler) .withDatafileDownloadInterval(15, TimeUnit.MINUTES) .withEventProcessor(batchProcessor) .build(context) val eyeofcloud = eyeofcloudManager.initialize(context, R.raw.datafile)

EventHandler eventHandler = DefaultEventHandler.getInstance(context); // Here we are using the builder options to set batch size // to 5 events and flush interval to a minute. BatchEventProcessor batchProcessor = BatchEventProcessor.builder() .withBatchSize(5) .withEventHandler(eventHandler) .withFlushInterval(TimeUnit.MINUTES.toMillis(1L)) .build(); EyeofcloudManager eyeofcloudManager = EyeofcloudManager.builder() .withSDKKey("<Your_SDK_Key>") .withEventHandler(eventHandler) .withDatafileDownloadInterval(15, TimeUnit.MINUTES) .withEventProcessor(batchProcessor) .build(context); EyeofcloudClient eyeofcloud = eyeofcloudManager.initialize(context, R.raw.datafile);

批处理事件处理器

BatchEventProcessor 是事件批处理位置的实现。该类维护单个使用者线程,该线程从 中提取事件,并在将结果发送到 和 之前缓冲这些事件,以达到配置的批大小或最大持续时间。EventProcessor``BlockingCollection``LogEvent``EventDispatcher``NotificationCenter

以下属性可用于_使用生成器类自定义_批处理事件处理器配置

生成器方法

使用以下方法自定义 .BatchEventProcessor

财产

默认值

描述

与事件处理程序

必填字段。指定用于将事件有效负载调度到云眼灰度实验的事件处理程序。

默认情况下,如果创建 Eyeofcloud 实例,它将传入 。 AsyncEventHandler``BatchEventProcessor

与批量大小

10

调度前要批处理的最大事件数。达到此数字后,将刷新所有排队的事件并将其发送到云眼灰度实验。

与冲洗间隔

30000(30 秒)

批处理事件有效负载并将其发送到云眼灰度实验的最长时间。以毫秒为单位。

与事件队列

1000

BlockingCollection,将要由执行程序批处理和调度的各个事件排队。

与通知中心

通知中心实例,用于触发任何通知,以便在刷新事件批次时发出通知。

与执行者

单线程执行器

负责触发事件批处理和后续调度到 Eyeofcloud 功能实验的执行器服务。

与超时

5000

等待事件处理器关闭执行的最长时间。以毫秒为单位。

高级配置

可以设置以下属性以覆盖 的默认配置。BatchEventProcessor

event.processor.batch.size

10

要发送到云眼灰度实验的事件批次的最大大小。

event.processor.batch.interval

30000

批处理事件有效负载并将其发送到云眼灰度实验的最长时间。以毫秒为单位。

event.processor.close.timeout

5000

等待事件处理器关闭执行的最长时间。以毫秒为单位。

更多信息,请参见初始化SDK

📘 注意

最大有效负载大小为 3.5 MB。如果生成的批处理有效负载超过此限制,请求将被拒绝,并显示 400 响应代码 .Bad Request Error

副作用

下表列出了使用此类可能触发的其他云眼灰度实验功能。

功能性

描述

日志事件

每当事件处理器生成一批事件时,将使用事件工厂创建一个 LogEvent 对象。
它包含一批转换和决策事件。
此对象将使用提供的事件调度程序进行调度,并且还将发送给通知订阅者

通知侦听器

刷新将调用 LOGEVENT 通知侦听器(如果此侦听器已订阅)。

注册日志事件侦听器

注册日志事件通知侦听器

KotlinJava

eyeofcloud.notificationCenter?.addNotificationHandler(LogEvent::class.java) { logEvent: LogEvent -> Log.d("Eyeofcloud", "event dispatched: $logEvent") }

eyeofcloud.getNotificationCenter().addNotificationHandler(LogEvent.class, logEvent -> { Log.d("Eyeofcloud", "event dispatched: " + logEvent); });

日志事件

LogEvent 对象是使用 EventFactoryopen in new window 创建的。它表示我们发送到云眼灰度实验后端的一批决策和转换事件。

对象

类型

描述

请求方法
必需(非空)

请求方法 (枚举)

调度日志事件时要使用的 HTTP 谓词。它可以是获取或发布。

必需的终结点 URL
(非空)

字符串

要将日志事件调度到的 URL。

请求参数
必需(非空)

映射<字符串,字符串>

要在日志事件中设置的参数。

事件需要批处理open in new window

事件批处理

它包含有关批处理的每个事件的所有信息。包括包含用户事件的访问者列表。

在应用程序退出时关闭云眼灰度实验

如果启用事件批处理,则必须在退出之前调用 Close 方法 ()。这可确保尽快刷新排队的事件,以避免数据丢失。 eyeofcloudClient.close()

警告

由于 Eyeofcloud 客户端维护排队事件的缓冲区,因此必须在关闭应用程序之前或在取消引用实例时调用 Eyeofcloud 功能实验实例。close()

方法

描述

关闭()

停止所有执行程序线程并刷新事件队列。此方法还将停止数据文件管理器的任何运行。scheduledExecutorService

Last update:
Contributors: zhangweixue,“zhangweixue”