
BoltzEngine はどのようなリトライを行いますか
BoltzEngine マスターノードとスレーブノードは、リトライで解決可能であり、同じメッセージを複数回送らないことが保証できる場面において、可能な限りのリトライを行います。
例えば APNs へ通知を行なった場合において、APNs サーバから TooManyRequests(同一デバイスへのリクエストが多すぎる) や InternalServerError(サーバ内部エラー) が返却された時は、少し時間を置いてリトライを行います。また、ExpiredProviderToken(プロバイダトークン期限切れ) エラーの場合は認証トークンを更新したうえでリトライを行います。 ただし、BadPriority(優先度の指定が不正) や BadDeviceToken(デバイストークンが不正) エラーの場合は、そのままリトライを行なっても解決の見込みがないため即時失敗として扱いますし、送信の途中でスレーブノードが停止した場合は1回だけの通知を保証できないためリトライの代わりにエラーを返します。
1メッセージあたりのリトライ回数
初回を除いて6回リトライします。従って、すべて失敗した場合は1つの通知あたり7回のリクエストを行います。それでも解決しない場合、BoltzEngine はエラーを返します。
リトライ間隔
前回のリクエストから1秒, 2秒, 4秒…のように間隔を開けてリトライします。間隔が1分を超える場合は、常に1分だけ待ってリトライします。このカウントは通知メッセージ単位で行うため、あるデバイスへの通知がリトライを行なっていても、他の通知には影響しません。
ただし、APNs や FCM サーバから時間の指定がある場合はそれに従います。
通知の有効期限とリトライの関係
BoltzEngine では各メッセージに有効期限が設定できます。 通知がリトライを行なっている途中で有効期限が切れた場合は、リトライ回数が残っていても通知失敗としてエラーを返します。