🚨
Swift VaporのQueuesRedisDriverでTimeoutエラーの対処法
概要
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に記載されていた解決方法です。
デフォルトの設定では、RedisStackの接続プールのタイムアウト時間が10msと非常に短いため、接続が確立できずにエラーが発生してしまいます。この問題を解消するには、接続プールのconnectionRetryTimeoutを適切な値に設定する必要があります。私は3秒に設定しましたが、Issueでも推奨されているように、秒単位で設定すれば多くのケースで解決できると思います。
あとがき
Issueの例にあった60秒だと確かに長すぎるので、1〜10秒くらいがいいように思います。
Discussion