Durable Object Container API 让你的 Durable Object 可以将容器计算与持久存储、警报(alarms)和请求处理协调起来。在具有容器绑定(binding)的 Durable Object 内,通过 this.ctx.container 访问它。从 Container 类迁移时,请在需要处将其辅助方法替换为应用代码。
更改代码前,先确认应用使用了哪些辅助方法。有些辅助方法需要应用代码才能保留现有行为。API 比较请参阅选择 API。
你可以迁移实现而不替换 Durable Object。保持 Worker 名称、导出的类名、绑定(binding)、容器镜像和现有迁移标签不变。更改 TypeScript 基类不需要新的 Durable Object 迁移。
Container 类扩展 DurableObject。将其继承的生命周期和路由辅助方法替换为使用 ctx.container 的应用代码。
- 在 Worker 中,将类改为扩展来自
cloudflare:workers的DurableObject。保持导出的类名不变,以保留其现有容器定义和 Durable Object 绑定(binding)。不要仅仅因为更改了基类而添加新的 Durable Object 迁移。请参阅 Wrangler 配置。 - 将
start()调用替换为ctx.container.start()。将stop()调用替换为signal()或destroy()(视情况而定)。不要假设start()会等待端口就绪。 - 将
defaultPort、containerFetch()和自动fetch()路由替换为getTcpPort(port).fetch()以及你自己的请求路由。转发请求前请检查端口就绪。 - 将
sleepAfter替换为setInactivityTimeout()。在适当处将生命周期钩子和schedule()替换为应用代码、monitor()和 Durable Object 警报(alarms)。 - 测试启动、并发请求、就绪、空闲关闭、警报投递、存储连续性,以及容器重启后的恢复。在
stop()或destroy()之后,容器可能暂时不可用。在检查端口就绪前先重试分配。然后,仅当没有其他代码导入@cloudflare/containers时再移除它。
除非你打算更改容器应用本身,否则请在 Wrangler 配置的 containers 部分中保持相同镜像。直接 API 仍会运行与其 Durable Object 类关联的镜像。