2016-07-07 6 views
0

私はGoのバックエンドからAndroid端末にプッシュ通知を送信するためにhttps://github.com/google/go-gcmを使用しています。 SendXmpp()への呼び出しは次のエラーで返していましたので、最近、これらのプッシュ通知が失敗しました:SendXmpp()と呼ばれる移動プロセスを再起動するgo-gcmを使用してXMPPプッシュ通知を送信するときの適切なエラー処理ですか?

write tcp <IP>:<port>-><IP>:<port>: write: connection timed out 

は、このエラーが離れて行くと、再び作業を開始プッシュ通知を行います。もちろん、Goプロセスを再開することは理想的ではありません。この種のエラーを処理するために私が明示的にできることはありますか?たとえば、現在のXmppClientを閉じてメッセージの送信を再試行すると、再試行で新しいXmppClientがインスタンス化され、新しい接続が開きますか?

答えて

0

(指数関数的な)バックオフの使用または実装をお勧めします。 GitHubにはいくつかのオプションがあります。 https://github.com/search?utf8=%E2%9C%93&q=go+backoffしかし、それは確かに包括的なリストではないし、実装することは非常に困難ではない。

基本的な考え方は、呼び出す関数を最大失敗限度に達するか、成功するまで関数を呼び出すバックオフ関数に渡すことです。各失敗の間に、待っている時間量が増えます。サーバを叩いてエラーを返す場合、このような方法では通常、問題が解決され、アプリケーションの信頼性が向上します。

また、中止機能があるものをお勧めします。これは、チャネルをバックオフ関数(呼び出したい関数)に渡すことで、Goでかなり簡単に実装できます。その後、アプリを停止する必要がある場合は、アボートチャンネルに信号を送り、バックオフが300秒待ってそこに座っていないようにします。

これで問題が解決しない場合でも、アプリの信頼性とサードパーティ製APIの相互作用に効果があります。

関連する問題