持久对象作为可编程的边车
Posted: Tue Apr 22, 2025 8:42 am
路由到容器是在底层使用Durable 对象Container实现的。在上面的示例中,类cloudflare:workers仅包装了一个支持容器的 Durable 对象,并为常见模式提供了辅助方法。在本文的其余部分,我们将直接查看使用 Durable 对象的示例,因为这将有助于理解平台的底层设计。
每个 Durable Object 都充当可编程的 Sidecar,可以代理对 美国电报号码数据 容器的请求并管理其生命周期。这让您能够以其他平台难以实现的方式控制和扩展容器。
您可以通过调用 Durable 对象上的 RPC 方法手动启动、停止和执行特定容器上的命令,该容器现在在 处有一个新对象this.ctx.container:
ckup"]);
}
}
您还可以监视您的容器并运行钩子来响应容器状态的变化。
例如,假设您有一个在容器中运行构建的 CI 作业。您希望根据退出状态向队列发送一条消息。您可以轻松编写此行为:
class BuilderContainer extends DurableObject {
constructor(ctx, env) {
super(ctx, env)
async function onContainerExit() {
await this.env.QUEUE.send({ status: "success", message: "Build Complete" });
}
async function onContainerError(err) {
await this.env.QUEUE.send({ status: "error", message: err});
}
this.ctx.container.start();
this.ctx.container.monitor().then(onContainerExit).catch(onContainerError);
}
async isRunning() { return this.ctx.container.running; }
}
最后,如果您需要在每次运行时将状态加载到容器中,则可以使用状态挂钩在容器休眠之前保留容器中的状态,并在容器启动后将状态重新加载到容器中:
每个 Durable Object 都充当可编程的 Sidecar,可以代理对 美国电报号码数据 容器的请求并管理其生命周期。这让您能够以其他平台难以实现的方式控制和扩展容器。
您可以通过调用 Durable 对象上的 RPC 方法手动启动、停止和执行特定容器上的命令,该容器现在在 处有一个新对象this.ctx.container:
ckup"]);
}
}
您还可以监视您的容器并运行钩子来响应容器状态的变化。
例如,假设您有一个在容器中运行构建的 CI 作业。您希望根据退出状态向队列发送一条消息。您可以轻松编写此行为:
class BuilderContainer extends DurableObject {
constructor(ctx, env) {
super(ctx, env)
async function onContainerExit() {
await this.env.QUEUE.send({ status: "success", message: "Build Complete" });
}
async function onContainerError(err) {
await this.env.QUEUE.send({ status: "error", message: err});
}
this.ctx.container.start();
this.ctx.container.monitor().then(onContainerExit).catch(onContainerError);
}
async isRunning() { return this.ctx.container.running; }
}
最后,如果您需要在每次运行时将状态加载到容器中,则可以使用状态挂钩在容器休眠之前保留容器中的状态,并在容器启动后将状态重新加载到容器中: