装う再試行する際には、いくつかのプロジェクト(データ製品)、必要ドッキング企業のマイクロチャネルサードパーティ製アプリケーション、マイクロ先週のget access_tokenは、ユーザーモジュール内の工場の情報コードマイクロチャネルのマイクロサービスを呼び出すために装うを使用してタイムアウトエラーは、この記事を記録することにより、問題解決プロセス。
定期的な問題:
次の部分的に依存1.SpringCloud
< 親> < のgroupId > org.springframework.boot </ のgroupId > < たartifactId >ばねブートスタータ親</ たartifactId > < バージョン> 1.5.3.RELEASE </ バージョン> </ 親> < dependencyManagement > < 依存性> < 依存> < groupIdを> org.springframework.cloud </ groupIdを> <たartifactId >ばねクラウド依存性</ たartifactId > < バージョン> Dalston.SR1 </ バージョン> < タイプ> POM </ タイプ> < スコープ>インポート</ スコープ> </ 依存> </ 依存関係> </ dependencyManagement > < 依存性> < 依存> < groupIdを> org.springframework.boot </ groupIdを> <たartifactId >春・ブート・スターター・ウェブ</ たartifactId > </ 依存関係> < 依存> < groupIdを> org.springframework.cloud </ groupIdを> < たartifactId >春・クラウド・スターター・ユーリカ</ たartifactId > </ 依存関係> < 依存> < groupIdを> org.springframework.cloud </ groupIdを> < たartifactId >春・クラウドスターター-装います</たartifactId > </ 依存関係>
2に係るマイクロチャネルインタフェースドキュメント:
取得コードの構成コールバック、コールAPIのマイクロチャネル後企業ID、ドメイン名を介してフロントエンド
参照ドキュメントhttps://work.weixin.qq.com/api/doc/90000/90135/91022
注意:
コードは、プロジェクトがなど、機能をプッシュし、後続のメッセージのためのRedisにキャッシュされ、キャッシュされたaccess_tokenはを取得する必要があるため、ドキュメントを参照して、一度使用することができ、
3.リクエストフローチャート
二.原因分析
1.全体のリンク要求は、フェーズ2の位置ふり要求が、YMLプロファイルはふり構成されていない、ふり従ってデフォルト設定を使用する、問題が発生した場合、ドキュメントはふり、ふりリトライを発見見ると結論付けることができますデフォルトのタイムアウトは1秒です、
だから今装うとして、従来の構成を装うタイムアウトを再設定
装う:
クライアント:
設定:
組織:
のconnecttimeout:5000
readTimeout:5000
実際には、サービス組織の名前が呼ばれて装う表されます
connecttimeoutは( - 推測保存された要求ユーレカサービスのリストを得ることを含む)接続の接続時間要求を表し、
readTimeoutは、呼接続確立要求後の時間を表し、
上記構成において2.組織及びデータサービスログを要求し表示することにより、発見要求を正常に確立することができるが、要求にステージ3のマイクロチャネルインタフェースが遅延後とき、それはふりリトライ第2の呼をトリガします。
由于阶段三请求微信的接口并不是没有调用,而是由于网络或者其他原因导致的微信没有响应,但是code又已经被消费了,当阶段二携带同样的code去调用微信的接口,这时就会出现
code已经被消费
3.此时有另外一个问题就是,项目中的服务都是单实例部署,springcloud组件中feign和ribbon都有重试的功能,
Spring Cloud中Feign整合了Ribbon,但Feign和Ribbon都有重试的功能,Spring Cloud为了统一两者的行为,在C版本以后,将Feign的重试策略默认设置为 feign.Retryer#NEVER_RETRY
(即永不重试)
因此Feign的调用本质还是通过ribbon去实现