配置事件分派器
配置事件分派器
云眼灰度发布/特性标帜(Feature Flag)AB实验 SDK 为每个触发的决策事件或转化事件发出 HTTP 请求。每个 SDK 都有一个内置的事件调度程序来处理这些事件,但我们建议根据环境的具体情况重写它。
节点开发工具包具有开箱即用的异步调度程序。建议自定义在生产中使用的事件调度程序,以确保以可扩展到应用程序处理的卷的方式对事件进行排队和发送。通过自定义事件调度程序,可以有效地处理大型事件量。或者在请求失败时实现重试逻辑。可以从头开始构建调度程序,也可以从提供的调度程序开始。
这些示例显示,要自定义事件调度程序,请使用事件调度程序实例初始化 Eyeofcloud 客户端(或管理器)
// Client with defaultEventDispatcher
const defaultEventDispatcher = require("@eyeofcloud/eyeofcloud-sdk/lib/plugins/event_dispatcher/index.node");
// Create an Eyeofcloud client with the default event dispatcher
var eyeofcloudClientWithDefaultDispatcher = eyeofcloud.createInstance({
datafile, eventDispatcher: defaultEventDispatcher
});
事件调度程序应实现一个dispatchEvent
函数,该函数接受三个参数:httpVerb
、url
和params
,所有这些都由内部类EventBuilder
创建。在此函数中,应该使用params
作为请求url
的主体(确保将其字符串化为 JSON)和标头中{content-type: 'application/json'}
向给定的请求发送POST
请求。
🚧 重要
如果使用的是自定义事件调度程序,请不要修改从云眼灰度发布/特性标帜(Feature Flag)AB实验返回的事件负载。修改此有效负载将更改结果。
事件批处理
配置事件批处理
我们提供了两个选项来配置事件批处理:eventBatchSize
和eventFlushInterval
。可以在客户端创建期间传入这两个选项。事件保留在队列中,直到:
- 事件数达到定义的
eventBatchSize
。 - 最旧的事件在队列中存在的时间超过了定义的
eventFlushInterval
,该值以毫秒为单位指定。然后刷新队列,并在单个网络请求中将所有排队的事件发送到 Eyeofcloud 功能实验。 - 收到新的数据文件修订版。仅当启用了实时数据文件更新时,才会发生这种情况。
JavaScript
const eyeofcloudSdk = require('@eyeofcloud/eyeofcloud-sdk')
eyeofcloudSdk.createInstance({
// other options
eventBatchSize: 100,
eventFlushInterval: 3000,
})
下表定义了这些选项,并列出了浏览器和服务器默认设置的一般建议。在浏览器上,我们建议使用小eventBatchSize
(10)和短eventFlushInterval
(1000)。这可确保以相对较快的方式发送事件,因为如果用户立即退回,某些事件可能会丢失,同时在许多决策调用连续发生的情况下获得网络效率。
对于服务器,这些数字更加灵活,应根据组织的流量和需求进行设置。请联系支持人员以获取针对特定实施的建议。
名字 | 描述 | 推荐值 |
---|---|---|
事件批量大小 | 队列中要保留的最大事件数。达到此数字后,将刷新所有排队的事件并将其发送到云眼灰度实验。 注意:将此值设置为 1,不会对事件进行批处理,并且事件请求的行为与 3.3.0 之前的 JavaScript SDK 中的行为完全相同。 | 默认值:10 |
事件刷新间隔 | 事件在刷新之前可以存在于队列中的最长持续时间(以毫秒为单位)。 | 默认值:30000 ms |
描述
推荐值
事件批量大小
队列中要保留的最大事件数。达到此数字后,将刷新所有排队的事件并将其发送到云眼灰度发布/特性标帜(Feature Flag)AB实验。
默认值:10
注意:将此值设置为 1,不会对事件进行批处理,并且事件请求的行为与 3.3.0 之前的 JavaScript SDK 中的行为完全相同。
根据组织的要求。
事件刷新间隔
事件在刷新之前可以存在于队列中的最长持续时间(以毫秒为单位)。
默认值:30000 ms
根据组织的要求。
📘 注意
最大有效负载大小为 3.5 MB。如果生成的批处理有效负载超过此限制,请求将被拒绝,并显示 400 响应代码
Bad Request Error
。负载大小较大的最常见原因是批大小较高。如果有效负载超出大小限制,请尝试配置较小的批大小。
在应用程序退出时关闭云眼灰度实验
如果启用事件批处理,则必须在退出之前调用 Close 方法(eyeofcloud.close()
)。这可确保尽快刷新排队的事件,以避免数据丢失。
❗
警告
由于 Eyeofcloud 客户端维护排队事件的缓冲区,因此必须在关闭应用程序之前或在取消引用实例时调用
close()
Eyeofcloud 功能实验实例。
方法 | 描述 |
---|---|
关闭() | 停止所有计时器并刷新事件队列。此方法还将停止数据文件管理器发生的任何计时器。 注意:我们建议将此方法连接到正在运行的进程的终止信号。 |
可以挂钩到SIGTERM
事件以确保调用close()
事件,从而保证发送队列中的所有事件。
节点
// respond to SIGTERM and close eyeofcloud
process.on('SIGTERM', async () => {
console.log('SIGTERM signal received.');
await eyeofcloud.close()
process.exit(0)
});