这个覆盖(override)被 OpenNext 用来触发过期路由的重新验证。在向客户端发送响应之前,OpenNext 会检查路由是否过期,如果是,它将调用队列覆盖来重新验证该路由。
如果你想更好地理解如何实现自己的队列,最简单的方法是查看现有的内置队列 (opens in a new tab)。
需要注意的几点:
- 默认实现使用 SQS 队列。这样做的主要优点是能够控制重新验证的并发性,并避免对同一路由多次触发重新验证。
- 你根本不需要使用队列。你可以直接在队列覆盖中触发重新验证。你可以在
direct
覆盖 (opens in a new tab)中看到一个非常简单的实现。
内置队列
sqs
SQS 队列会为每个需要重新验证的路由向 SQS 队列发送一条消息。如果你在配置中没有提供任何队列,它将作为默认使用。
它使用 @aws-sdk/client-sqs
来与 SQS 交互。
要求
- 你需要向服务器提供
REVALIDATION_QUEUE_URL
环境变量。
sqs-lite
SQSLite 队列会为每个需要重新验证的路由向 SQS 队列发送一条消息。
这个实现是 sqs
队列的轻量版本,因为它使用 aws4fetch
来与 SQS 交互。
要求
- 你需要向服务器提供
REVALIDATION_QUEUE_URL
、REVALIDATION_QUEUE_REGION
(默认回退到us-east-1
)、AWS_ACCESS_KEY_ID
、AWS_SECRET_ACCESS_KEY
和AWS_SESSION_TOKEN
环境变量。
direct(直接队列)
Direct Queue 会直接在队列覆盖中触发路由的重新验证。这在开发阶段或当你不想使用队列时非常有用。
⚠️
使用此实现时需谨慎,因为它可能导致同一路由的多次重新验证。
dummy(虚拟队列)
Dummy Queue 是一个虚拟实现,会抛出异常。除非你想禁用 ISR(增量静态再生),否则不应使用它。