2019の9日目の記事です。devblog.thebase.inはじめまして。BASE株式会社のtatsuと申します。使う機会がありました。併用するという形で落ち着いたのですが、いくつか知見を得ることも出来たのでその事について書きたいと思います。最初の壁:ResponseがどのRequestの結果なのか分からんまず並列処理を実装しました。実際のものとは違いますが流れは一緒。「どのリクエストの結果を受け取っているか分からん。生成順に処理されますが、結果はもちろん順不同で返ってきます。生成部分を少し変えるだけ。成否処理の第2引数が'index1','index2'といった値になります。生成順に整数が振られますが、上記の様に任意の値を渡すことも出来ます。下記を参考に処理を分けてあげると良いかもしれません。http://docs.guzzlephp.org/en/latest/quickstart.html#exceptions二つ目の壁:Retryの度に結果を保持したい一応の並列処理は出来た。ついても考えてみます。いうリトライの方法を標準で用意してくれています。};}上記の例はかなりシンプルですが、リトライの判断部分と待機時間を実装してMiddleware::retry()に渡してあげれば良しなにリトライしてくれます。http://docs.guzzlephp.org/en/stable/request-options.html#delayここでまた問題が生じました。時の結果も逐一保持したいとなりました。すべき動作が終わってから到達します。時には実行されません。中で保持を行う必要があります。判別する必要があります。等に識別子を設定して判別する事も出来ます。持たせるのはどうなのかという考えが浮かび別の方法を取ることにしました。...こう言うと凄そうに聞こえるかもしれませんが、実際は標準のものをちょっと変えただけです。全文は長いので変更箇所の辺りだけです。deciderに$options['retries'](リトライ回数)では無く$optionsごと渡す様にしました。識別子を持たせることでリクエストを判別する事ができる様になりました。既存のものと被らない様にすれば影響はないですし、リクエスト先にも渡ることはありません。$options['retries']自体は$optionsに同keyが無ければ__invoke()で追加されます。外から操作する事も出来るということでもあります。...と思っていました。この時は三つ目の壁:PoolとRetryMiddlewareって併用出来ないの&リトライ中にプロセス死んじゃう開発の世界で三段オチを味わうことになろうとは...。併用すると同期してしまいます」といった情報を見つけました。いやいやいや、そんなはずは...と思いつつ試してみました。方法は簡単でリクエスト毎にリトライの待機時間を変えてみます。2秒固定でリトライを繰り返してみます。並列処理が非同期で行われているのであれば、4回目で順番が入れ替わりrequest2が連続するはずです。結果は...?綺麗にrequest1とrequest2が交互に並び続けました。ワーイさらに追い打ちをかける様にもう一つ問題が発覚します。リトライ中にプロセス死んじゃうこれは一般的ではない環境での事象ですので詳細は省きますが、あるタイミングで実行中のプロセスが強制的に終了させられてしまうという事がわかりました。終了までに多少の猶予があるのですがリトライの待機時間によっては、待機中に強制終了されてしまい終了に備える事が出来ないのです。プロセスの管理側からの操作なので内部で対策をするにも限界がりそうでした。ちなみに強制終了後すぐに再起動されます。上記二点の問題が浮上し悩んでいた所、同僚からこんな言葉が(実際にはgitのコメント)...。...なるほど?結果的にこれが自分がとった解決方法となりました。関しての説明は長くなってしまうので「便利なメッセージキューイングサービス」とだけ言わせて頂きます。機能の一つで遅延機能があります。組み合わせる事で上手くいきそうです。するので強制終了の猶予時間以上の処理は無いので、終了に備える事が出来ます。イレギュラー中のイレギュラーとはいえ起こり得る事に対処出来て良かった。キューを受け取ってリクエストを送るというものだったという事があります。導入コストはほぼ0でした。そもそも使っていたなら気づけよとも思いますが、こういう時って離れて視野を広くするのがなかなか難しかったりします。そんな時に第三者の視点から意見を貰えるのは本当に有り難いですよね。頑張っていたと思います。連携を選んで良かったと感じています。やったからこそ、それほど苦労せずに連携させられたという事もあるはずです。長くなってしまいましたが、業務上の課題は積極的にオープンにすると良さそうというお話でした(guzzleどこいった)。)の開発チームによるブログです。Groupの大木です。Developerをしている東口です。Groupのマネージャーをしている山田です。12/1から始まっ...Archiveスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。