内容提要
Vercel 守护进程现可通过服务绑定调用部署内服务:在 vercel.toml 中声明绑定,指定目标服务及接收其 URL 的环境变量;守护进程像调用普通 HTTP 端点一样使用该 URL,Vercel 负责内部路由、认证和 TLS,服务保持私有。绑定为单向,服务无法绑定守护进程;每个实例始终调用启动它的部署,即使发生晋升或回滚。
延伸解读
绑定配置的关键字段
在 vercel.toml 中,通过 [[daemons.worker.bindings]] 声明绑定,需指定 type="service"、目标 service 名称、format="url" 以及接收 URL 的环境变量 env。示例中守护进程 worker 绑定 api 服务,并将服务 URL 注入到 API_URL 环境变量,守护进程代码直接读取该变量即可调用。
调用方式与安全由平台处理
守护进程像调用普通 HTTP 端点一样使用绑定的 URL,例如通过 fetch 发起请求。Vercel 负责内部路由、认证和 TLS,服务本身保持私有,无需额外暴露公网或手动配置证书。这降低了守护进程与服务间通信的复杂度,开发者只需关注业务逻辑。
单向绑定与部署固定性
绑定是单向的:服务不能反向绑定守护进程。此外,每个守护进程实例始终调用启动它的那个部署中的服务,即使该部署后续发生晋升或回滚,调用关系也不会改变。这意味着部署版本间的服务调用是隔离的,不会因环境变动而意外切换目标。
Q&A
Vercel 守护进程如何调用部署内的服务?
守护进程通过服务绑定调用部署内服务。在 vercel.toml 中声明绑定,指定目标服务和接收其 URL 的环境变量,然后守护进程像调用普通 HTTP 端点一样使用该 URL。
如何在 vercel.toml 中配置守护进程的服务绑定?
在 vercel.toml 中添加 [[daemons.worker.bindings]] 配置块,设置 type = "service"、service = "api"、format = "url" 和 env = "API_URL",其中 env 指定接收服务 URL 的环境变量名。
服务绑定是单向的还是双向的?
绑定是单向的:守护进程可以绑定服务,但服务不能绑定守护进程。
守护进程调用服务时,Vercel 负责哪些底层工作?
Vercel 负责内部路由、认证和 TLS,服务保持私有,守护进程只需使用提供的 URL 发起请求。
部署晋升或回滚后,守护进程实例会调用哪个部署的服务?
每个实例始终调用启动它的那个部署的服务,即使发生晋升或回滚也不会改变。
守护进程调用绑定服务时,代码中如何发起请求?
使用普通的 fetch 调用,例如:await fetch(new URL('jobs/next', process.env.API_URL)),其中 API_URL 是环境变量,包含服务的 URL。