前には、この他は同じで、唯一異なるが、装うことにより、サービスコールで、リボンでサービスコールを書きました。
レジストリサービスやマイクロ変わらない商品、およびブログ投稿など、具体的な参照:SpringCloud(4)---リボンサービスコール、ソースコード解析
ここだけのマイクロサービスの順序を書き換えます。
GitHubのプロジェクトコード住所:https://github.com/yudiandemingzi/spring-cloud-study
、OrderServiceの注文のmicroService
1、のpom.xml
ここだけのマイクロ・サービスに関連して受注のパッケージに新しいjarファイルを追加
<! - 依存装います - > <依存> <groupIdを> org.springframework.cloud </ groupIdを> <たartifactId>ばねクラウドスタータopenfeign </たartifactId> </依存関係>
2、application.yml
サーバ: ポート:9001 #指定されたアドレスレジストリ ユーレカ: クライアント: serviceURL: defaultZoneます。http:// localhost:7001 /ユーリカ/ サービス名# 春: 応用: 名前:オーダーサービス 政策のバランスを取る#カスタムロード(一般的にデフォルトで搭載されていません) 製品、サービス: リボン: NFLoadBalancerRuleClassName:com.netflix.loadbalancer.RandomRule
3、SpringBootスタートアップクラス
@SpringBootApplication //コメントを追加@EnableFeignClients @EnableFeignClients パブリッククラスOrderApplication { パブリック静的無効メイン(文字列[] args){ SpringApplication.run(OrderApplication.class、引数)。 } }
4、ProductOrderServiceImpl注文は、クラスのインターフェイス
ここでの受注エンティティクラスと順序が書き込みインタフェースクラスにではなく、同じ記事
@サービス パブリッククラスProductOrderServiceImpl実装ProductOrderService { @Autowired プライベートProductClient productClient。 @オーバーライド 公共productOrderは、保存(int型のuserId、int型PRODUCTID){ // JSON形式の文字列データを取得します。 ストリング応答= productClient.findById(商品コード)。 ターゲットJsonNodeに// JSON文字列 JsonNode jsonNode = JsonUtils.str2JsonNode(応答)。 //順にカプセル化されたデータエンティティ productOrderはproductOrderは=新しいproductOrderは(); productOrder.setCreateTime(新しいDate()); productOrder.setUserId(USERID)。 productOrder.setTradeNo(UUID.randomUUID()のtoString())。 商号および商品価格を取得します// productOrder.setProductName(jsonNode.get( "名前")のtoString()); productOrder.setPrice(Integer.parseInt(jsonNode.get( "価格")のtoString())); //商品のマイクロクラスタサービス構成ので、印刷がここに呼ばれているクラスタノード、出力ポート番号を確認します。 System.out.println(jsonNode.get( "名前")のtoString()); productOrderはを返します。 } }
5、ProductClientクラス
ここではクラスとして理解することができ、あなたがはるかに高い上のコードの読みやすさの点ではリボンのように相対的な、(マイクロ財やサービスと呼ぶ)をコールする必要がマイクロコントローラ層のサービスがあります。
/ ** ■商品・サービスのクライアント *名=「製品・サービス」サーバーの名前です。 * / @FeignClient(名前=「プロダクト・サービス」) パブリックインターフェースProductClient { //製品・サービス/ API / V1 /製品/検索:このような組み合わせは、// HTTP同等です ( "/ API / V1 /製品/見つける")@GetMapping ストリングfindById(@RequestParam(値= "ID")のint ID); }
6、JsonUtilsツール
/ ** * JSONツール * / パブリッククラスJsonUtils { プライベート静的最終ObjectMapper objectMappper =新しいObjectMapper(); メソッド// JSON文字列オブジェクト転送JsonNode パブリック静的JsonNode str2JsonNode(文字列str){ {試します リターンobjectMappper.readTree(STR); }キャッチ(IOExceptionを電子){ ヌルを返します。 } } }
7、OrderController类
@RestController ( "API / V1 /オーダー")@RequestMapping パブリッククラスOrderController { @Autowired プライベートProductOrderService productOrderService。 @RequestMapping( "保存") 保存、公開オブジェクト(@RequestParam( "USER_ID")int型のuserId、@RequestParam( "product_idの")int型のProductID){ リターンproductOrderService.save(userIdを、PRODUCTID)。 } }
8、ビューの業績
同時に、負荷分散を達成することも可能です。
第二に、コンセプトを説明しました
装う、requestBodyの使用に注意を払うを使用するときは、@PostMappingを使用する必要があります
図1に示すように、実行の流れ
合計、以下を達成するためのプロセス装うソース:
(1)まず、@EnableFeignCleintsでオープンFeignCleintコメント
(2)インタフェースふりルールの実装、および注釈を追加@FeignCleint
(3)プログラムを開始し、パケットスキャン、スキャンすべての注釈@ FeignCleintクラス、及び容器IOC情報に注入しました。
この方法は、特定RequesTemplateを生成するために、JDK剤によって、インタフェースと呼ばれる(4)
(5)RequesTemplate生成された要求
(6)クライアントHttpURLConnectionの、のHttpClientはOkhttpであってもよいとすることができる処理にクライアントに要求
(7)は、DO負荷分散を結合クラスリボンカプセル化LoadBalanceClient最後Clientクラスです。
2、ふり比較優位とリボン
自身がリボンで含まれている(1)装う、さらにリボンのパッケージを除きます
(2)自分自身を装うが、擬似HTTPクライアント、宣言、より明確な思考と便利を書くことです
(3)feginが容易、アノテーションベースのプログラミング・インターフェースを使用する方法であります
:最後に、ソースコードの1ペアが素敵なブログの解析推奨装うが解決ソースの深い理解を。
私はたまにしかそれについてのすべてを疑問に思っ過ぎて、静かにします。昔に持っている人は、さらに愚か、価値がない非難、ナイーブがありました。すべての後に、次の日、まだ非常に長いです。自分自身を奨励するために続けて、
夜明け、だけでなく、新たな出発点、だけでなく、未知の旅(大佐7)で
:への転載https://www.cnblogs.com/qdhxhz/p/9571600.html