事件批处理
事件批处理
本主题介绍云眼特性标帜(Feature Flag)AB实验 Go SDK 如何使用事件处理器将展示次数和转化事件批处理到单个有效负载中,然后再将其发送到云眼。
云眼特性标帜(Feature Flag)AB实验 Go SDK 将决策和转换事件批处理到单个有效负载中,然后再将其发送到云眼。这是通过称为事件处理器的 SDK 组件实现的。
事件批处理的优点是,根据定义、配置和使用事件处理器的方式,减少对云眼特性标帜(Feature Flag)AB实验的出站请求数。这意味着,跟踪的展示次数和转化事件数量相同,网络流量就会减少。
在 Go SDK 中,提供接口的实现和批处理事件。可以根据两个参数控制批处理:QueueingEventProcessor``EventProcessor
- 批大小:定义在发送到云眼特性标帜(Feature Flag)AB实验之前一起批处理的事件数。
- 刷新间隔:定义任何批处理事件应发送到云眼特性标帜(Feature Flag)AB实验的时间量。
当批大小达到指定的限制或刷新间隔达到指定的时间限制时,将发送由批处理有效负载组成的事件。 下面将更详细地介绍选项。Batchcessor
📘 注意
事件批处理适用于现成事件调度程序和自定义事件调度程序。
事件批处理过程不会从事件中删除任何个人身份信息 (PII)。请确保您没有向云眼发送任何不必要的 PII。
基本示例
Go
import eoc "github.com/eyeofcloud/go-sdk"
// the default client will have a BatchEventProcessor with the default options
eocClient, err := eoc.Client("SDK_KEY_HERE")
默认情况下,批大小为 10,刷新间隔为 30 秒。
高级示例
若要自定义事件处理器,可以使用客户端工厂方法。
Go
import (
"time"
"github.com/eyeofcloud/go-sdk/pkg/client"
"github.com/eyeofcloud/go-sdk/pkg/event"
"github.com/eyeofcloud/go-sdk/pkg/utils"
)
eyeofcloudFactory := &client.EyeofcloudFactory{
SDKKey: "SDK_KEY",
}
// You can configure the batch size and flush interval
eventProcessor := event.NewBatchEventProcessor(
event.WithBatchSize(10),
event.WithFlushInterval(30 * time.Second),
)
eocClient, err := eyeofcloudFactory.Client(
client.WithEventProcessor(eventProcessor),
)
批处理事件处理器
BatchEventProcessor
是事件批处理EventProcessor
位置的实现。该类维护单个使用者线程,该线程从内存中队列中提取事件,并在将LogEvent
结果发送到EventDispatcher
和NotificationCenter
之前缓冲这些事件,以达到配置的批大小或最大持续时间。
以下属性可用于自定义批处理事件处理器配置。
财产 | 默认值 | 描述 |
---|---|---|
事件。事件调度程序 | NewQueueEventDispatcher | 用于将事件有效负载调度到云眼灰度实验。 |
事件。批量大小 | 10 | 调度前要批处理的最大事件数。达到此数字后,将刷新所有排队的事件并将其发送到云眼灰度实验。 |
事件。冲洗间隔 | 30000(30 秒) | 在批处理和调度事件之前等待的毫秒。 |
事件。Q | NewInMemoryQueue | BlockingCollection,将要由执行程序批处理和调度的各个事件排队。 |
事件。最大队列大小 | 2000 | 可以排队的最大事件数。 |
事件。事件调度程序
NewQueueEventDispatcher
用于将事件有效负载调度到云眼特性标帜(Feature Flag)AB实验。
事件。批量大小
10
调度前要批处理的最大事件数。达到此数字后,将刷新所有排队的事件并将其发送到云眼特性标帜(Feature Flag)AB实验。
事件。冲洗间隔
30000(30 秒)
在批处理和调度事件之前等待的毫秒。
事件。Q
NewInMemoryQueue
BlockingCollection,将要由执行程序批处理和调度的各个事件排队。
事件。最大队列大小
2000
可以排队的最大事件数。
更多信息,请参见初始化SDK。
副作用
下表列出了使用此方法可能触发的其他云眼特性标帜(Feature Flag)AB实验功能。
功能性 | 描述 |
---|---|
日志事件 | 每当事件处理器生成一批事件时,将使用事件工厂创建一个 LogEvent 对象。 它包含一批转换和决策事件。 此对象将使用提供的事件调度程序进行调度,并且还将发送给通知订阅者 |
通知侦听器 | 刷新将调用 LOGEVENT 通知侦听器(如果此侦听器已订阅)。 |
注册和注销日志事件侦听器
下面的示例代码演示如何添加和删除 LogEvent 通知侦听器。
Go
import (
"fmt"
"github.com/eyeofcloud/go-sdk/pkg/client"
"github.com/eyeofcloud/go-sdk/pkg/event"
)
// Callback for log event notification
callback := func(notification event.LogEvent) {
// URL to dispatch log event to
fmt.Print(notification.EndPoint)
// Batched event
fmt.Print(notification.Event)
}
eyeofcloudFactory := &client.EyeofcloudFactory{
SDKKey: "SDK_KEY",
}
eyeofcloudClient, err := eyeofcloudFactory.Client()
LogEvent 对象是使用[工厂](https://github.com/eyeofcloud/go-sdk/blob/8a8fb7e959f2597d26d2a0dc3a6a072dcbc15f0f/pkg/event/factory.go#L46)创建的。它表示我们发送到云眼特性标帜(Feature Flag)AB实验后端的一批决策和转换事件。
// Remove callback for logEvent notification
err = eyeofcloudClient.EventProcessor.(*event.BatchEventProcessor).RemoveOnEventDispatch(id)
日志事件
LogEvent 对象是使用工厂创建的。它表示我们发送到云眼灰度实验后端的一批决策和转换事件。
对象 | 类型 | 描述 |
---|---|---|
需要端点 (非空) | 字符串 | 要将日志事件调度到的 URL。 |
(必选)事件 | [事件。批次] | 它包含有关批处理的每个事件的所有信息。包括包含用户事件的访问者列表。 |
在应用程序退出时关闭云眼灰度实验
如果启用事件批处理,则必须在退出之前调用 Close 方法 (eyeofcloudClient.Close()
)。这可确保尽快刷新排队的事件,以避免数据丢失。
[事件。批次]
它包含有关批处理的每个事件的所有信息。包括包含用户事件的访问者列表。
在应用程序退出时关闭云眼特性标帜(Feature Flag)AB实验
如果启用事件批处理,则必须在退出之前调用 Close 方法 ()。这可确保尽快刷新排队的事件,以避免数据丢失。 eyeofcloudClient.Close()
❗
警告
由于云眼特性标帜(Feature Flag)AB实验客户端维护排队事件的缓冲区,因此必须在关闭应用程序之前或在取消引用实例时调用云眼特性标帜(Feature Flag)AB实验实例。
Close()
方法 | 描述 |
---|---|
关闭() | 停止所有执行程序线程并刷新事件队列。此方法还将停止为数据文件管理器运行的任何scheduledExecutorService 方法。 |