直至正文
豫言包府
← 众包

豫言操作系统消息队列适配 0.1.0

豫言 · 库

用云工 QUEUE 生产者绑定和 queue 事件的消息批次实现消息队列接口。

消息队列云工适配

生产用云工 QUEUE 绑定之 send 与 sendBatch,消费用 queue 事之 MessageBatch(云工宿主已置批与书之物于句柄表,ack、retry({delaySeconds}) 逐条而呼)。适配之要:

  • 消息体由宿主规范:豫言以消息体之文为字符串授宿主之 JSON.parse,取回 JSON.stringify 之规范文,径入 send 之参文;字符串之字面由宿主 TextDecoder 所成,故任何控制之字皆不误,亦不倚豫言 JSON 库于转义之能。规范文中不许有以 {"$句柄":、{"$未定义":、{"$大整数":、{"$数字": 起首之对象:句柄桥必以之还为宿主之物或特殊之值,若许之,则客可借消息体而伪造宿主之柄。宿主规范之文,字符串内之引号皆带反斜线,故此子串之验,既不漏,亦不伤字符串之内容。
  • 批量之数组由豫言拆之:适配惟于规范文上作一遍兼记字符串与转义之状之括号扫描,拆得每项及其 body 之文,逐项验其形与限,复拼为 {"body":…,"contentType":"json","delaySeconds":…}。body 恒为不透明之规范文,不经豫言 JSON 库之析,故 \r、\uXXXX、负数、指数等皆不受今 JSON 库之限。
  • 消费之读:批名、书数、标识、尝试数用云工宿主旧有之队列原语;时戳经书柄读 timestamp,Date 以 getTime() 取毫秒(试验之替身亦可径授毫秒整数);body 乃宿主所出之规范 JSON,含句柄桥之记(Date、Map、二进制、undefined、BigInt、NaN 之属)则抛豫言异。标识与队列名之字面:纯可见 ASCII 者径加引号,余者经宿主 TextDecoder 与 JSON.stringify 而成。
  • 越界与延迟先由适配核之:宿主于越界之号所抛乃宿主 JS 之误,豫言不可捕,故先以书数核之而后呼,使越界为可捕之豫言异;retry({delaySeconds}) 惟延迟大于零时用之。
  • 适配不用 ackAll、retryAll,亦不触书之内容类。生产之投,恒定 contentType: "json"。
  • 真本地 workerd(Wrangler 4.129.0)实测:send、sendBatch 以 contentType: "json" 而投,消费者所读 attempts 自一而增,timestamp 为 Date,body 为同一 JSON 值;retry({delaySeconds}) 依延迟而重投;单条消息体恰一二八零零零字节可投、一二八零零一字节则拒(其误辞惟 Unknown Internal Error (15000),故适配自以一二八零零零字节校之而给中文之因);sendBatch 中每条亦以一二八零零零字节为限(二条各一二八零零零字节,合二五六零零零字节之批量可投);不显确亦不重试,即视为成;未捕之异使整批重投,连已显确者并重投(Miniflare 之 broker 于处败之时不别已确之书),故消费之处必幂等。
  • 单事之运行时限(三十秒)与 Wasm 例不越事,皆云工宿主所供;宿主于 queue 事所返之 Promise 待程序毕而成,程序抛未捕之异则被拒,平台据此重试整批。

一致性验证/ 有试应用、真 Wasm 之 Node 测试(含批量拆分之随机结构对拍)及复行之说明。

所赖

观包之制

上传之记

今修订:1 ·

  1. 修订 1
    取 ZIP

包之层级

父:豫言操作系统适配

无子包。