读取、设置与删除当前持久对象的唯一告警,并在告警事件中读取重试次数。
源码浏览已生成;不能解析的文件以纯文本展示,不表示通过类型检查。
# 持久告警接口规范 0.1.0 本包让应用管理当前持久对象(Durable Object)的告警(alarm):读取已设置的告警时刻、设置或替换它、删除它,并在告警事件里读取平台已重试的次数。告警是持久对象在指定时刻由平台再次唤醒的机制:到点时宿主以 `durable-alarm` 事件进入应用的 `_start`(应用据[网页入站接口](../网页入站/规范.汉语.md)的 `读取入站事件种类` 辨别),此时没有 HTTP 请求,应用须自己从[持久事务](../持久事务/规范.汉语.md)的持久仓恢复所需状态。告警适合“稍后继续”的后台工作:长任务的分段续跑、定期清理、失败重试。 ## 语义 单个持久对象**至多一个告警**。`设置持久告警` 把它设为绝对 Unix 毫秒时刻(自 1970-01-01T00:00:00Z 起的整数毫秒,取值 0 至 8640000000000000),已有告警被替换;时刻已经过去则平台尽快触发。`读取持久告警` 返回(是否已设置,时刻):未设置返回(阴,零)。`删除持久告警` 去掉告警,本来没有时无事发生。 告警事件开始时,该告警视为已清除:处理入口里 `读取持久告警` 返回(阴,零),入口可以再次 `设置持久告警` 安排下一次(周期任务就是这样写成的)。处理入口失败(抛出未捕获异常、超过事件时限、被平台终止)时,平台自动退避重试:失败之后、重试开始之前,告警视为已设置(`读取持久告警` 返回阳与重试时刻);重试事件里 `读取告警重试次数` 返回已重试的次数(首次为零,第一次重试为一,依此类推),重试事件开始时告警同样视为已清除。重试的次数上限与退避时间以平台为准(平台文档现行:最多 6 次,指数退避,起始约 2 秒;本地 workerd 已见重试次数 0、1、2 递增,上限待云端验证),用尽后平台放弃该告警。按平台文档,告警至少触发一次(云端待验证),因而处理入口须**幂等**。非告警事件里 `读取告警重试次数` 恒为零。 告警函数只在持久对象事件中可用(事件种类以 `durable-` 开头,含[持久事务](../持久事务/规范.汉语.md)的事务入口与[持久独占](../持久独占/规范.汉语.md)的独占区入口)。在事务入口里设置或删除告警,与该事务同命运:事务提交则生效,回滚或失败则撤销(本地 workerd 已验,云端待验)。`清空持久仓` 在 SQLite 存储上按兼容日期可能连告警一并清除,需要告警的应用应在清仓之后重新设置。告警事件的墙钟时限默认与其他事件相同(30 秒),宿主可通过构建产物的 `执行配置.json` 为 `durable-alarm` 放宽至最多 15 分钟;时限属宿主配置,不属于本接口。 ## 函数 `读取持久告警`:无参,返回(爻,整数)。`设置持久告警`:参数为绝对毫秒整数,返回有。`删除持久告警`:无参,返回有。`读取告警重试次数`:无参,返回整数。 ## 失败情形 时刻小于 0 或大于 8640000000000000 属违规:抛可捕获的豫言异常,消息 `持久告警时刻须在 0 至 8640000000000000 之间`。在非持久对象事件里调用前三个函数属违规:抛可捕获的豫言异常,消息 `当前事件不属于持久对象`。存储后端故障属平台故障,宿主中止当前事件,豫言无法捕获。`读取告警重试次数` 不失败。 ## 跨宿主一致性 任何实现须保持:单对象单告警、设置即替换、绝对毫秒;告警事件开始时告警视为已清除;失败后重试且重试次数递增、失败等待重试期间告警视为已设置;非告警事件重试数为零;事务内告警变更与事务同命运;上述限额与失败类别。 ## 一致性样例 新对象上 `读取持久告警` 得(阴,零);`设置持久告警 1900000000000` 后得(阳,1900000000000);再 `设置持久告警 1900000005000` 后得(阳,1900000005000);`删除持久告警` 后得(阴,零)。`设置持久告警 -1` 与 `设置持久告警 8640000000000001` 抛异常。告警事件里:首次触发 `读取告警重试次数` 为 0 且 `读取持久告警` 为(阴,零);处理入口故意抛错后,`读取持久告警` 在下一次进入前为(阳,重试时刻),重试事件里重试次数为 1。事务入口里 `设置持久告警 T` 后调用 `回滚持久事务`,事务之后 `读取持久告警` 仍为(阴,零)。 ## 边界 本包不提供多个告警、周期告警或按名称的定时器;周期任务由处理入口重设告警实现。不保证准点(平台在时刻之后触发,可能延迟),也不保证恰好一次。告警只属于持久对象,Worker 的 `scheduled` 定时事件另有能力。
# 持久告警之约 0.1.0 此包使客管当前持久对象(Durable Object)之告警(alarm):读其已设之时,设之或易之,删之,且于告警之事中读平台已试之次。告警者,持久对象至期而由平台复唤之机也:至期则宿主以 `durable-alarm` 之事入客之 `_start`(客循[网页入站之约](../网页入站/规范.文言.md)之 `读取入站事件种类` 辨之),是时无 HTTP 请,客当自[持久事务](../持久事务/规范.文言.md)之久仓复其所需之态。告警宜于“稍后再续”之后台事:长务分段而续、定期清理、败而重试。 ## 义 一持久对象**至多一告警**。`设置持久告警` 设之于绝对 Unix 毫秒之时(自 1970-01-01T00:00:00Z 起之整数毫秒,取值 0 至 8640000000000000),已有者被易;时已过则平台速触之。`读取持久告警` 返(已设否,时):未设则返(阴,零)。`删除持久告警` 去其告警,本无则无事。 告警之事始,其告警视为已清:入口中 `读取持久告警` 返(阴,零),入口可再 `设置持久告警` 以排下次(周期之务即如此成之)。入口败(抛未捕之异、逾事时之限、为平台所止)则平台自退避而重试:败后、重试始前,告警视为已设(`读取持久告警` 返阳与重试之时);重试之事中 `读取告警重试次数` 返已试之次(初次为零,首重试为一,以次递增),重试之事始,告警亦视为已清。重试之次数上限与退避之时以平台为准(平台文档现行:至多六次,指数退避,起约二秒;本地 workerd 已见重试次数 0、1、2 递增,上限待云端验),尽则平台弃其告警。按平台文档,告警至少触发一次(云端待验),故入口须**幂等**。非告警之事,`读取告警重试次数` 恒为零。 告警之术惟持久对象之事可用(事类以 `durable-` 起,含[持久事务](../持久事务/规范.文言.md)之事务入口与[持久独占](../持久独占/规范.文言.md)之独占区入口)。于事务入口中设或删告警,与其事务同命:事务提交则行,回滚或败则撤(本地 workerd 已验,云端待验)。`清空持久仓` 于 SQLite 之存,依兼容日期或并清告警,须告警者当于清仓之后复设之。告警之事之墙钟时限,默与他事同(三十秒),宿主可由构建产物之 `执行配置.json` 为 `durable-alarm` 放宽至多十五分;时限属宿主之配,非此接口之事。 ## 术 `读取持久告警`:无参,返(爻,整数)。`设置持久告警`:参为绝对毫秒整数,返有。`删除持久告警`:无参,返有。`读取告警重试次数`:无参,返整数。 ## 败之情形 时小于零或大于 8640000000000000,违约也:抛可捕之豫言异,辞曰 `持久告警时刻须在 0 至 8640000000000000 之间`。于非持久对象之事调前三术,违约也:抛可捕之豫言异,辞曰 `当前事件不属于持久对象`。存后端故障,平台之故也,宿主止当前事,豫言不可捕。`读取告警重试次数` 不败。 ## 跨宿主之一致 诸实现须守:一对象一告警、设即易、绝对毫秒;告警之事始,告警视为已清;败则重试且次数递增、败后待试之际告警视为已设;非告警之事重试数为零;事务内告警之变与事务同命;上述诸限与败类。 ## 一致性样例 新对象 `读取持久告警` 得(阴,零);`设置持久告警 1900000000000` 后得(阳,1900000000000);再 `设置持久告警 1900000005000` 后得(阳,1900000005000);`删除持久告警` 后得(阴,零)。`设置持久告警 -1` 与 `设置持久告警 8640000000000001` 皆抛异。告警之事:初触发 `读取告警重试次数` 为 0 而 `读取持久告警` 为(阴,零);入口故意抛错后,下次入前 `读取持久告警` 为(阳,重试之时),重试之事中次数为 1。事务入口中 `设置持久告警 T` 而调 `回滚持久事务`,事务之后 `读取持久告警` 仍为(阴,零)。 ## 界 此包不供多告警、周期告警或依名之定时器;周期之务由入口重设告警而成。不保准点(平台于时后触发,或有延迟),亦不保恰一次。告警惟属持久对象,Worker 之 `scheduled` 定时之事另有其能。