🚨

Swift VaporのQueuesRedisDriverでTimeoutエラーの対処法

2025/01/29に公開

概要

Server-Side Swift VaporでQueuesを使いたくてQueuesRedisDriverを使用したら

[ ERROR ] Job run failed [error: RedisConnectionPoolError(baseError: RediStack.RedisConnectionPoolError.BaseError.timedOutWaitingForConnection)]

というエラーが出てしまってJobが実行されなくて詰まったのでその対処法の備忘録です。

結論

/* 🙅‍♂️ */try app.queues.use(.redis(url: "redis://localhost:6379"))
/* 🙆‍♂️ */try app.queues.use(.redis(.init(url: "redis://localhost:6379", pool: .init(connectionRetryTimeout: .seconds(3)))))

解説

以下のIssueに記載されていた解決方法です。

https://github.com/vapor/queues-redis-driver/issues/30

デフォルトの設定では、RedisStackの接続プールのタイムアウト時間が10msと非常に短いため、接続が確立できずにエラーが発生してしまいます。この問題を解消するには、接続プールのconnectionRetryTimeoutを適切な値に設定する必要があります。私は3秒に設定しましたが、Issueでも推奨されているように、秒単位で設定すれば多くのケースで解決できると思います。

あとがき

Issueの例にあった60秒だと確かに長すぎるので、1〜10秒くらいがいいように思います。

nextbeat Tech Blog

Discussion