SpringCloudの1分間の紹介


Crazy MakerCircleSpringCloudNginx高同時実行コアプログラミング」Javaエンジニア/アーキテクトに不可欠[リンク]

SpringCloudファミリーバケット

SpringCloud Family Bucketは、サービスの登録と検出、構成センター、フルリンクモニタリング、サービスゲートウェイ、負荷分散、サーキットブレーカー、その他のコンポーネントを含む、Pivo​​talチームが提供するマイクロサービスオープンソースソリューションの完全なセットです。上記のコンポーネントは、主にNetFilxのNetFlixOSSスイートのコンポーネントは、統合によって完成します。その中で、より重要な統合コンポーネントは次のとおりです。

(1)spring-cloud-netflix-Eureka登録センター

(2)spring-cloud-netflix-hystrixRPC保護コンポーネント

(3)spring-cloud-netflix-ribbonクライアントの負荷分散コンポーネント

(4)spring-cloud-netflix-zuul内部ゲートウェイコンポーネント

(6)spring-cloud-config構成センター

NetFlix OSSのオープンソースコンポーネントを統合することに加えて、SpringCloudファミリーバケットテクノロジースタックは、いくつかの中立的なオープンソースコンポーネントも統合します。たとえば、SpringCloud Zookeeperコンポーネントは、Zookeeperを統合して、サービス検出と構成管理の別の方法を提供します。

SpringCloudアーキテクチャの単一のビジネスサービスは、SpringBootアプリケーションに基づいて開始および実行されます。SpringBootは、Pivo​​talチームによって提供されるまったく新しいフレームワークであり、その設計目的は、新しいSpringアプリケーションの初期セットアップと開発プロセスを簡素化することです。SpringCloudとSpringBootの関係は何ですか?

(1)まず、SpringCloudはSpringBoot開発の利便性を利用して、分散システムインフラストラクチャの開発を巧妙に簡素化します。

(2)次に、SpringBootは単一のマイクロサービスプロバイダーの迅速で便利な開発に焦点を合わせ、SpringCloudはマイクロサービスプロバイダー間の調整とガバナンスの関係を解決します。

(3)第3に、SpringBootはSpringCloudを離れて開発プロジェクトを独立して使用できますが、SpringCloudはSpringBootなしでは実行できず、SpringBootが存在することに依存しています。

最終的に、SpringCloudは、SpringBootによって開発された個々のマイクロサービスを統合および管理し、構成管理、サービスディスカバリ、サーキットブレーカー、ルーティング、マイクロエージェント、イベントバス、グローバルロック、意思決定キャンペーンを提供し、個々のマイクロサービスごとに配布します。会話などに基づく分散支援機能。

SpringCloud開発の足場

単一のアプリケーションであろうと分散アプリケーションであろうと、ゼロから開発する場合、セッション管理などのユーザー認証など、実行する必要のある多くの基本的で反復的な作業が必要になります。足場の開発により、この基本的な作業を省略し、足場が提供する基本モジュールを直接使用することができ、足場の仕様に従ってビジネスモジュールを開発することができます。

著者は、オープンソースプラットフォーム上の多くのオープンソーススキャフォールドを調べたところ、ビジネスモジュール開発に直接使用できるものはほとんどないか、パッケージが重すぎて分離できないか、ビジネスモジュールの下請けが不明確で開発に不便であることがわかりました。シンプルさと明快さの原則に基づいて、著者のクレイジーメーカーサークルコミュニティは、独自のマイクロサービス開発スキャフォールディングcrazy-springcloudを立ち上げました。その一般的なモジュールと機能は次のとおりです。

crazymaker-server     --  根项目
│  ├─cloud-center     --  微服务的基础设施中心
│  │  ├─cloud-eureka      --  注册中心
│  │  ├─cloud-config      --  配置中心
│  │  ├─cloud-zuul        --  网关服务
│  │  ├─cloud-zipkin      -- 监控中心
│  ├─crazymaker-base  -- 公共基础依赖模块
│  │  ├─base-common     -- 普通的公共依赖,如 utils 类的公共方法
│  │  ├─base-redis      -- 公共的 redis 操作模块 
│  │  ├─base-zookeeper  -- 公共的 zookeeper 操作模块
│  │  ├─base-session    -- 分布式 session 模块
│  │  ├─base-auth       -- 基于 JWT + SpringSecurity 的用户凭证与认证模块
│  │  ├─base-runtime    -- 各 provider 的运行时公共依赖,装配的一些通用 Spring IOC Bean 实例
│  ├─crazymaker-uaa   --业务模块: 用户认证与授权
│  │  ├─uaa-api        -- 用户 DTO、Constants 等
│  │  ├─uaa-client     --  用户服务的 Feign 远程客户端
│  │  ├─uaa-provider   -- 用户认证与权限的实现,包含controller 层、service层、dao层的代码实现
│  ├─crazymaker-seckill  --业务模块: 秒杀练习
│  │  ├─seckill-api        -- 秒杀 DTO、Constants 等
│  │  ├─seckill-client     -- 秒杀服务的 Feign 远程调用模块
│  │  ├─seckill-provider   -- 秒杀服务核心实现,包含controller层、service层、dao层的代码实现
│  ├─crazymaker-demo    --业务模块: 练习演示
│  │  ├─demo-api        -- 演示模块的 DTO、Constants 等
│  │  ├─demo-client     -- 演示模块的 Feign 远程调用模块
│  │  ├─demo-provider   -- 演示模块的核心实现,包含controller层、service层、dao层的代码实现

実際、ビジネスモジュールを下請けする方法の問題については、ほとんどの企業が独自の統一された仕様を持っています。crazy-springcloudスキャフォールディングは、明確な責任、簡単なメンテナンス、および迅速なコードナビゲーションの観点から、各ビジネスモジュールを次の3つのサブモジュールに細分化します。

(1){モジュール} -api

このサブモジュールは、いくつかの一般的な定数ビジネス定数とDTO送信オブジェクトを定義します。このサブモジュールは、内部ビジネスモジュールに依存するだけでなく、ビジネスモジュールに依存する外部モジュールにも依存する場合があります。

(2){モジュール}-クライアント

このサブモジュールは、外部モジュールに依存するいくつかのFeignリモートコールクライアントクラスを定義します。このサブモジュールは外部モジュール専用であり、他の内部サブモジュールに依存することはできません。

(3){モジュール}-プロバイダー

このサブモジュールは、ビジネスモジュール全体の中核であり、独立して起動および実行できるサービスプロバイダー(アプリケーション)でもあります。このモジュールには、ビジネスに関連するコントローラーレイヤー、サービスレイヤー、およびdaoレイヤーの完全なコード実装が含まれています。論理。

crazy-springcloudマイクロサービス開発の足場は、次の2つの側面で弱体化しています。

(1)デプロイメントに関しては、Dockerコンテナーを使用する代わりに、シェルスクリプトを使用する代わりに、コンテナーの導入が弱められています。多くの理由があります。まず、このスキャフォールディングの本来の目的は、Dockerの代わりにシェルスクリプトを使用してデプロイすることで、誰もがシェルコマンドとスクリプトを学習できるようにすることです。次に、JavaとDockerは実際には十分に統合されており、学習は非常に簡単です。 、そしてあなたは小さなワンクリックリリースを達成することができ、マスターするためのいくつかの情報を見つけることができます;第三に、展開と操作とメンテナンスは特別なタスク、本番環境の展開、そして自動化された構築全体とデプロイメント作業は、実際には運用と保守の特別なタスクです。これは専任の運用と保守の担当者によって行われ、デプロイメントのコアは依然としてシェルスクリプトであるため、開発者がシェルスクリプトを習得することが最も重要です。

(2)監視ソフトウェアの導入が弱まっている。この本では、リンクモニタリング、JVMパフォーマンスインジケータ、およびサーキットブレーカモニタリングソフトウェアの使用について具体的に紹介していません。多くの理由があります。1つは、監視ソフトウェアが多すぎること、導入が完了しすぎている場合、スペースが十分でないこと、導入が少なすぎる場合は使用できないことです。2つ目は、監視ソフトウェアを使用していることです。ほとんどの場合、ソフトウェアの操作手順と手順がいくつかあります。原則の内容は比較的小さく、ビデオの使用はテキストによる知識の伝達効果よりも優れています。Crazy Maker Circleは、参考のためにマイクロサービスモニタリングに関する説明ビデオを公開する場合があります(必ずしもそうとは限りません)。コミュニティブログに注意してください。いずれにせよ、SpringCloudのコア原則を習得している限り、これらの監視コンポーネントの使用を習得することは、基本的にすべての人にとって簡単なことです。

Eurekaサーバーレジストリを起動します

Eureka自体はNetflixによってオープンソース化されたレジストリ製品であり、SpringCloudは対応する統合パッケージを提供します。次の理由から、レジストリの例としてこれを選択しました。

(1)Eurekaは業界(特に海外)で広く使用されており、フレームワーク全体がNetflixの過酷な本番環境のテストに耐えてきました。

(2)Eurekaレジストリに加えて、Netflixの他のサービスガバナンス機能も非常に強力です。これには、Ribbon、Hystrix、Feign、Zuul、およびその他のコンポーネントが組み合わされて、完全なサービスガバナンスフレームワークが形成されます。サービスが変わります。とても簡単です。

では、NetflixとSpringCloudの関係は何ですか?

Netflixは、インターネットストリーミングメディアプレーヤーであり、トラフィックが非常に多いアメリカのビデオ大手です。Netflixがシステム全体をマイクロサービスアーキテクチャに移行したことも事実です。さらに、Netflixは、マイクロサービスガバナンスエコシステム内のほぼすべてのコンポーネントを、NetflixOSSと呼ばれるオープンソースとしてJavaコミュニティに提供しています。

SpringCloudは、2015年にSpringの背後でPivotal(EMCとVMwareが共同で設立した会社)によって立ち上げられたオープンソース製品です。主にNetflixのオープンソースコンポーネントをさらにカプセル化して、Spring開発者がマイクロサービスアーキテクチャのアプリケーションを構築できるようにします。

SpringCloudEurekaはSpringCloudNetflixマイクロサービススイートの一部です。これはNetflixEurekaに基づくセカンダリパッケージです。主にマイクロサービスインスタンスの自動登録と検出を完了します。これはマイクロサービスアーキテクチャのコアおよび基本機能でもあります。

Eurekaによって管理される各マイクロサービスインスタンスは、プロバイダーインスタンスと呼ばれます。各プロバイダーインスタンスのマイクロサービスインスタンスには、Eurekaクライアントクライアントコンポーネント(レジストリクライアントコンポーネントと同等)が含まれており、その主なタスクは次のとおりです。

(1)Eureka Serverを使用したプロバイダーインスタンスの登録、更新、オフライン操作を完了します。主な登録情報には、サービス名、マシンIP、ポート番号、ドメイン名などが含まれます。

(2)Eurekaサーバーからプロバイダーインスタンスリストを取得し、ローカルにキャッシュします。

一般的に、サービス管理アプリケーションとして、Eurekaサーバーは独立してデプロイおよび実行されます。Eurekaサーバーレジストリアプリケーションを作成するときは、最初にeurekaサーバー依存関係ライブラリをpom.xmlファイルに追加する必要があります。


<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

次に、アノテーション@EnableEurekaServerをスタートアップクラスに追加して、このアプリケーションがEurekaサーバーであることを宣言する必要があります。スタートアップクラスのコードは次のとおりです。


package com.crazymaker.springcloud.cloud.center.eureka;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
//在启动类中添加注解 @EnableEurekaServer
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

次に、アプリケーション構成ファイルapplication.ymlでEurekaサーバーのいくつかのパラメーターを構成します。基本的な設定ファイルはおおまかに次のとおりです。

server:
  port: 7777
spring:
  application:
    name: eureka-server
eureka:
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
       #服务注册中心的配置内容,指定服务注册中心的位置
       defaultZone: ${SCAFFOLD_EUREKA_ZONE_HOSTS:http://localhost:7777/eureka/}
  instance:
hostname: ${EUREKA_ZONE_HOST:localhost}
  server:
    enable-self-preservation: true # 开启自我保护
eviction-interval-timer-in-ms: 60000 # 扫描失效服务的间隔时间(单位毫秒,默认是60*1000)即60秒

上記の構成ファイルには、サービスレジストリとしての構成アイテム(eureka.server。)、プロバイダープロバイダーとしての構成アイテム(eureka.instance。)、レジストリのクライアントコンポーネントとしての構成アイテム(Eureka )の3種類の構成アイテムが含まれています。 client。*)。特定の理由については、「SpringCloudNginx高同時実行コアプログラミング」という本を参照してください。

構成が完了したら、次のように、スタートアップクラスEurekaServerApplicationを実行してEurekaサーバーを起動し、ブラウザー(ポートはserver.port構成アイテムの値)を介してEurekaサーバーのコンソールインターフェイスにアクセスできます。図。

ここに画像の説明を挿入

図:Eurekaサーバーのコンソールインターフェイス

構成構成センターを起動します

分散マイクロサービスアーキテクチャを使用するシステムでは、サービスの数が非常に多いため、サービス構成ファイルの統合管理を容易にするために、分散構成センターコンポーネントが必要です。各サービスの構成が分散化されている場合、オンラインになった後、構成の一貫性を維持する方法は頭痛の種になります。

したがって、各サービスの構成は集中管理する必要があります。SpringCloudConfig構成センターはより優れたソリューションです。SpringCloud Config構成センターの使用には、次の2つの部分が含まれます。

(1)config-serverサーバー構成;(独立して実行する必要があります)

(2)config-clientクライアント構成。(コンポーネントとしてプロバイダーマイクロサービスプロバイダーに組み込まれます)

config-serverサービス

SpringCloudを介してconfig-serverサービスを構築するには、3つのステップが必要です。まず、大まかに次のように、pom.xmlにspring-cloud-config-server依存関係を導入します。

 <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-config-server</artifactId>
</dependency>

次に、作成したSpringBootプログラムのメインクラスに@EnableConfigServerアノテーションを追加して、ConfigServerサービスを有効にします。コードは次のとおりです。

@EnableConfigServer
@SpringBootApplication
public
class Application {

​    public static void main(String[] args) {
​      new  SpringApplicationBuilder(Application.class).web(true).run(args);
   }
}

3番目のステップは、プロパティファイルの場所を設定することです。SpringCloud Configは、構成をローカルに保存する方法を提供します。ブートストラップ起動プロパティファイルで、プロパティspring.profiles.active = nativeを設定し、プロパティファイルの場所を大まかに次のように設定します。

server:
  port: 7788  #配置中心端口
spring:
  application:
    name: config-server   # 服务名称
  profiles:
    active: native   # 设置读取本地配置文件
  cloud:
    config:
      server:
        native:
          searchLocations: classpath:config/  #申明本地配置文件的存放位置

構成手順:

(1)spring.profiles.active = nativeは、gitから構成を読み取る代わりに、ローカル構成を読み取ることを意味します。

(2)search-locations = classpath:config /は、クラスパスの構成の下にある検索ファイルのパスを示します。

サーバーの構成ルール:構成パスに、{label} / {application}-{profile} .propertiesのコマンド仕様で対応する構成ファイルを配置します。上記の例では、次の構成ファイルが配置されています。

共通構成共通、データベース構成データベース、およびキャッシュ構成の関連属性をそれぞれ設定します。構成構成センターが開始されたら、アドレス形式http:// $ {CONFIG-HOST}:$ {CONFIG-PORT} / {application} / {profile} [/ {label}]を使用して、ロードされた構成属性に直接アクセスします。 。

たとえば、例のhttp://192.168.233.128:7788/crazymaker/redis/devアドレスにアクセスすると、返される構成情報を次の図に示します。

ここに画像の説明を挿入

特記事項:SpringCloud config-serverは、Git、ネイティブ、SVNなどのさまざまな構成をサポートしています公式の推奨事項は構成にGitメソッドを使用することですが、ここではGitメソッドに焦点を当てていませんが、ローカルファイルメソッドが使用されています。3つの理由があります:

(1)学習または一般的な開発の場合、ローカルファイルの構成がより簡素化されます。

(2)登録センターと構成センターを統合した、より便利でシンプルな実稼働環境でNacosを使用することをお勧めします

マイクロサービスの概要

この本のサポートソースコードcrazy-springcloudスキャフォールディングでは、次の図に示すように、uaa-provider(ユーザーアカウントと認証)、demo-provider(デモンストレーション目的)、seckill-provider(seckillサービス)の3つのプロバイダーサービスプロバイダーが設計されています。 。表示します。
ここに画像の説明を挿入

図:この本のソースコード内のサービスプロバイダー

uaa-プロバイダーマイクロサービスプロバイダー

まず、プロバイダーサービスプロバイダーには、少なくとも次の2つのコンポーネントパッケージの依存関係が必要です。SpringBootWEBサービスコンポーネント、Eurekaクライアントクライアントコンポーネント、おおよそ次のとおりです。

<dependencies>
<!--SpringBoot WEB 服务组件 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
</dependency>

    <!-- Eureka Client 客户端组件 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
</dependencies>

SpringBoot WEBサービスコンポーネントはRESTインターフェースサービスを提供するために使用され、Eurekaクライアントクライアントコンポーネントはサービスの登録と検出に使用されます。上記のMavenの依存関係から、SpringCloudテクノロジーシステムでは、プロバイダーサービスプロバイダーが最初にSpringBootアプリケーションであることがわかります。したがって、SpringCloudマイクロサービステクノロジーを学習する前に、SpringBoot開発の基本的な知識が必要です。
次に、@ EnableDiscoveryClientアノテーションをSpringBootアプリケーションのスタートアップクラスに追加して、Eurekaクライアントクライアントコンポーネントを有効にします。スタートアップクラスのコードは次のとおりです。

package com.crazymaker.springcloud.user.info.start;
//...省略import
@SpringBootApplication
/*
 *  启用 Eureka Client 客户端组件
 */
@EnableEurekaClient
public class UAACloudApplication
{
    public static void main(String[] args)
    {
        SpringApplication.run(UAACloudApplication.class, args);
    }
}

次に、プロバイダーモジュール(またはプロジェクト)のsrc / main / resourcesのブートストラップスタートアッププロパティファイル(bootstrap.propertiesまたはbootstrap.yml)に、プロバイダーインスタンスに関連する構成を次のように追加します。

spring:
  application:
    name: uaa-provider

server:
  port: 7702
  servlet:
      context-path: /uaa-provider
eureka:
  instance:
    instance-id: ${spring.cloud.client.ip-address}:${server.port}
    ip-address: ${spring.cloud.client.ip-address}
    prefer-ip-address: true  #访问路径优先使用 IP地址
    status-page-url-path: /${server.servlet.context-path}${management.endpoints.web.base-path}/info     
    health-check-url-path: /${server.servlet.context-path}${management.endpoints.web.base-path}/health 
client:
    egister-with-eureka: true  #注册到eureka服务器
    fetch-registry: true       #是否去注册中心获取其他服务
    serviceUrl:
      defaultZone: http://${EUREKA_ZONE_HOST:localhost}:7777/eureka/

上記の構成項目を詳細に紹介する前に、プロバイダースタートアップクラスを開始します。コンソールログはおおよそ次のとおりです。

...com.netflix.discovery.DiscoveryClient - DiscoveryClient_UAA-PROVIDER/192.168.233.128:7702: registering service...
....
...com.netflix.discovery.DiscoveryClient - DiscoveryClient_UAA-PROVIDER/192.168. 233.128:7702 - registration status: 204

上記のログが表示されている場合は、プロバイダーインスタンスが正常に開始されたことを示しています。Eurekaサーバーを介してサービス登録が成功したかどうかをさらに確認できます。Eurekaサーバーのコンソールインターフェイスを開くと、次の図に示すように、uua-providerのインスタンスが正常に登録されていることがわかります。

ここに画像の説明を挿入

写真:uua-providerインスタンスがEurekaサーバーに正常に登録されました

前述のように、SpringCloudのプロバイダーインスタンスは、プロバイダーサービスプロバイダーとレジストリクライアントの両方の役割を果たします。したがって、プロバイダー構成ファイルには、プロバイダーインスタンスロール関連の構成とEurekaクライアントクライアントロール関連の構成の2種類の構成があります。
プロバイダーインスタンスロールの関連する構成については、「SpringCloudNginx高同時実行コアプログラミング」という本を参照してください。

uaa-providerはRESTインターフェースを実装します

紹介する例として、uaa-Providerのユーザー情報取得インターフェースを取り上げます。

これは、ユーザー情報を取得するためのインターフェース/ api / user / detail / v1です。インターフェースの特定のコードは、次の図に示すように、uaa-Providerモジュールにあります。

ここに画像の説明を挿入

具体的なコードは次のとおりです。

package com.crazymaker.springcloud.user.info.controller;

import com.alibaba.fastjson.JSONObject;
import com.crazymaker.springcloud.common.dto.UserDTO;
import com.crazymaker.springcloud.common.result.RestOut;
import com.crazymaker.springcloud.user.info.service.impl.FrontUserEndSessionServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;


@Api(value = "用户信息、基础学习DEMO", tags = {"用户信息、基础学习DEMO"})
@RestController
@RequestMapping("/api/user" )
public class UserController
{

    @Resource
    private FrontUserEndSessionServiceImpl userService;
    /**
     * 注入全局的加密器
     */
    @Resource
    PasswordEncoder passwordEncoder;

    @GetMapping("/detail/v1" )
    @ApiOperation(value = "获取用户信息" )
    public RestOut<UserDTO> getUser(@RequestParam(value = "userId", required = true) Long userId)
    {
        UserDTO dto = userService.getUser(userId);
        if (null == dto)
        {
            return RestOut.error("没有找到用户" );
        }
        return RestOut.success(dto).setRespMsg("操作成功" );
    }


    @GetMapping("/passwordEncoder/v1" )
    @ApiOperation(value = "密码加密" )
    public RestOut<String> passwordEncoder(
            @RequestParam(value = "raw", required = true) String raw)
    {

//        passwordEncoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
        String encode = passwordEncoder.encode(raw);
        return RestOut.success(encode);
    }
}

uaa-プロバイダーの操作結果

ここに画像の説明を挿入

ユーザー情報を取得する:

ここに画像の説明を挿入
ここに画像の説明を挿入

デモプロバイダーがRPCリモート呼び出しを完了します

デモプロバイダーがFeign + Ribbonを使用してRPCリモート呼び出しを行う場合、Javaリモート呼び出しインターフェイスごとにFeignはRPCリモート呼び出しクライアント実装クラスを生成しますが、実装クラスは開発者に対して透過的です。これの存在を感じることはできません。クラス。

次のFeign + Ribbon統合モジュールの依存関係をMavenpomファイルに追加する必要があります。

 <!--导入 SpringCloud Ribbon -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        </dependency>
        
         <!--添加Feign依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

クライアント側のRPC実装クラスは、リモート呼び出しJavaインターフェイスとサービスプロバイダープロバイダーの間に配置され、次の責任を負います。

(1)REST要求のアセンブル:Javaインターフェースのパラメーターに従ってターゲットRESTインターフェースのURLをアセンブルします。

(2)要求を送信して結果を取得する:Java HTTPコンポーネント(HttpClientなど)を介してサービスプロバイダーのRESTインターフェイスを呼び出し、REST応答を取得します。

(3)結果のデコード:RESTインターフェースの応答結果を解析し、ターゲットPOJOオブジェクト(Javaインターフェースの戻り値の型)にカプセル化して返します。

RESTサービスのローカルプロキシインターフェイス

次の図に示すように、このインターフェイスの特定のコードはuaa-clientモジュールにあります。
ここに画像の説明を挿入

具体的なコードは次のとおりです。

package com.crazymaker.springcloud.user.info.remote.client;

import com.crazymaker.springcloud.common.dto.UserDTO;
import com.crazymaker.springcloud.common.result.RestOut;
import com.crazymaker.springcloud.standard.config.FeignConfiguration;
import com.crazymaker.springcloud.user.info.remote.fallback.UserClientFallback;
import com.crazymaker.springcloud.user.info.remote.fallback.UserClientFallbackFactory;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * Feign 客户端接口
 * @description: 用户信息 远程调用接口
 * @date 2019年7月22日
 */

@FeignClient(value = "uaa-provider",
        configuration = FeignConfiguration.class,
        fallback = UserClientFallback.class,
//        fallbackFactory = UserClientFallbackFactory.class,
        path = "/uaa-provider/api/user")
public interface UserClient
{
    /**
     * 远程调用 RPC 方法:获取用户详细信息
     * @param userId 用户 Id
     * @return 用户详细信息
     */
    @RequestMapping(value = "/detail/v1", method = RequestMethod.GET)
    RestOut<UserDTO> detail(@RequestParam(value = "userId") Long userId);
}

RPC呼び出しは、RESTサービスのローカルプロキシインターフェイスを介して行われます

次の図に示すように、RPC呼び出しを行うための特定のコードは、デモプロバイダーモジュールにあります。

package com.crazymaker.springcloud.demo.controller;

import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.crazymaker.springcloud.common.dto.UserDTO;
import com.crazymaker.springcloud.common.result.RestOut;
import com.crazymaker.springcloud.common.util.JsonUtil;
import com.crazymaker.springcloud.user.info.remote.client.UserClient;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;


@RestController
@RequestMapping("/api/call/uaa/")
@Api(tags = "演示 uaa-provider 远程调用")
public class UaaRemoteCallController
{
 
    //注入 @FeignClient注解配置 所配置的 客户端实例
    @Resource
    UserClient userClient;

    @GetMapping("/user/detail/v2")
    @ApiOperation(value = "Feign 远程调用")
    public RestOut<JSONObject> remoteCallV2(
            @RequestParam(value = "userId") Long userId)
    {
        RestOut<UserDTO> result = userClient.detail(userId);
        JSONObject data = new JSONObject();
        data.put("uaa-data", result);
        return RestOut.success(data).setRespMsg("操作成功");
    }
}

デモプロバイダーはuaa-clientモジュールに依存する必要があります

デモプロバイダーを開始する

ここに画像の説明を挿入

swagger uiにアクセスします:

ここに画像の説明を挿入

Swaggerを介してRPC操作を実行する

ここに画像の説明を挿入

ここに画像の説明を挿入

わかりました、それは非常に簡単ですか

ソースコードについては、ブック「を参照してくださいSpringCloud nginxの大量同時コアプログラミング」。
春のクラウドへの導入は非常にシンプルですが、原理は非常に複雑で、そして春の雲の原則を習得すると、コアの工場になるために必要不可欠な知識ですエンジニア。

環境への備え:

crazy-springcloudスキャフォールディング(他のスキャフォールディングも同様)に基づくマイクロサービス開発と自己検証のプロセスでは、関連する基本的なミドルウェアはおおよそ次のとおりです。

(1)ZooKeeper

ZooKeeperは、分散型のオープンソース分散型調整アプリケーションであり、ビッグデータフレームワークHadoopおよびHbaseの重要なコンポーネントです。分散アプリケーションでは、分散ロック、マスター選択、分散ネーミングサービスなど、高可用性でデータの整合性を確保するための多くの基本機能を提供できます。

crazy-springcloudスキャフォールディングでは、高性能の分散IDジェネレーターがZooKeeperを使用します。その原理と使用法については、「Netty Zookeeper Redis HighConcurrencyPractice」という本を参照してください。

(2)Redis

Redisは高性能キャッシュデータベースです。同時実行性の高いシナリオでは、Redisはリレーショナルデータベースに対して非常に優れたバッファリングの役割を果たすことができます。Redisは、システムの同時実行性と応答速度を向上させる上で重要な役割を果たします。crazy-springcloudスキャフォールディングの分散セッションはRedisを使用します。Redisの原理と使用法については、「Netty Zookeeper Redis HighConcurrencyPractice」という本を参照してください。

(3)ユーリカ

Eurekaは、Netflixによって開発されたサービス登録および検出フレームワークです。RESTサービスプロバイダーであり、主にAWS(Amazonクラウド)で実行されている中間層サービスを見つけて、中間層サービスの負荷分散とフェイルオーバーを実現するために使用されます。SpringCloudはそれをサブプロジェクトspring-cloud-netflixに統合して、SpringCloudのサービス登録および検出機能を実現します。

(4)SpringCloud Config

SpringCloud Configは、SpringCloudファミリーバケットの最も初期の構成センターです。本番シナリオでは、多くの企業がNacosまたはConsul統合構成センターを使用して独立した構成センターを置き換えていますが、Configは、簡単な構成でSpringCloudプロジェクトに適しています。

(5)ズール

ZuulはNetflixオープンソースゲートウェイであり、Eureka、Ribbon、Hystrix、その他のコンポーネントで使用できます。SpringCloudはZuulを統合および拡張し、マイクロサービスクラスターの内部ゲートウェイとして使用し、内のさまざまなプロバイダーサービスプロバイダーへのRPCルーティングを担当します。クラスターとリクエストのフィルタリング。

上記のミドルウェアのポート構成、およびいくつかのインストールと使用のビデオは、おおよそ次の表に示すとおりです。

ミドルウェア リンクアドレス
Linux Redisのインストール(ビデオ付き) Linux Redisのインストール(ビデオ付き)
Linux Zookeeperのインストール(ビデオ付き) Linux Zookeeperのインストール、ビデオ付き
…完全な開発環境の準備、-> クレイジーメーカーサークルブログパークの正面玄関に行ってください
。。。。。

クレイジーメーカーサークルに戻る

Crazy Maker Circle-Javaの同時実行性の高い研究コミュニティ、すべての人に大きな工場への扉を開く

おすすめ

転載: blog.csdn.net/crazymakercircle/article/details/109906859