SpringCloud(5)----装うサービスコール

前には、この他は同じで、唯一異なるが、装うことにより、サービスコールで、リボンでサービスコールを書きました。

レジストリサービスやマイクロ変わらない商品、およびブログ投稿など、具体的な参照: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

 

おすすめ

転載: www.cnblogs.com/wllcs/p/12002763.html