(ターン)歴史上最も単純なSpringCloudチュートリアル|パート2:サービスコンシューマー(レスト+リボン)(フィンチリーバージョン)

前回の記事では、サービスの登録と発見についてお話しました。マイクロサービスアーキテクチャでは、ビジネスは独立したサービスに分割され、サービスとサービス間の通信はhttprestfulに基づいています。Springクラウドには2つのサービス呼び出しメソッドがあります。1つはribbon + restTemplateで、もう1つは偽物です。この記事では、最初にリボン+レストベースについて説明します。

1.リボンの紹介

リボンはクライアント側のロードバランサーであり、HTTPおよびTCPクライアントの動作を細かく制御できます。FeignはすでにRibbonを使用しているため、@ FeignClientを使用している場合は、このセクションも適用されます。

-----公式サイトより

リボンはデフォルトでこれらの構成Beanを実装しています。

  • IClientConfig RibbonClientConfig:DefaultClientConfigImpl
  • IRule RibbonRule:ZoneAvoidanceRule
  • IPing RibbonPing:NoOpPing
  • ServerList RibbonServerList:ConfigurationBasedServerList
  • ServerListFilter RibbonServerListFilter:ZonePreferenceServerListFilter
  • ILoadBalancer RibbonLoadBalancer:ZoneAwareLoadBalancer

2.準備


この記事は前の記事のプロジェクトに基づいています。eureka-serverプロジェクトを開始します。service-hiプロジェクトを開始します。ポートは8762です。service-hi構成ファイルのポートを8763に変更してから、開始します。 service-hiがeureka-serverに2つのインスタンスを登録したことがわかりました。これは、小さなクラスターに相当します。

アイデアの下で複数のインスタンスを開始する方法については、次の記事を参照してください。

https://blog.csdn.net/forezp/article/details/76408139

図に示すように、localhost:8761にアクセスします。
å¨è¿éæå¥å¾çæè¿°

3つ目は、サービスコンシューマーを構築する

新しいspring-bootプロジェクトを作成し、次の名前を付けます
。service -ribbon;そのpom.xmlは親pomファイルを継承し、次の依存関係を導入します。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.forezp</groupId>
    <artifactId>service-ribbon</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>service-ribbon</name>
    <description>Demo project for Spring Boot</description>


    <parent>
        <groupId>com.forezp</groupId>
        <artifactId>sc-f-chapter2</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        </dependency>
    </dependencies>

</project>

プロジェクトの構成ファイルで指定されているサービスの登録センターアドレスはhttp:// localhost:8761 / eureka /、プログラム名はservice-ribbon、プログラムポートは8764です。構成ファイルapplication.ymlは次のとおりです。

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
server:
  port: 8764
spring:
  application:
    name: service-ribbon

プロジェクトのスタートアップクラスで、@ EnableDiscoveryClientを介してサービスセンターに登録し、bean:restTemplateをプログラムのiocに挿入し、@ LoadBalancedアノテーションを使用して、このrestRemplateが負荷分散関数を開くことを示します。

@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
public class ServiceRibbonApplication {

    public static void main(String[] args) {
        SpringApplication.run( ServiceRibbonApplication.class, args );
    }

    @Bean
    @LoadBalanced
    RestTemplate restTemplate() {
        return new RestTemplate();
    }

}


以前にiocコンテナのrestTemplateを挿入して、service-hiサービスの「/ hi」インターフェイスを使用するテストクラスHelloServiceを記述します。ここでは、特定のURLアドレスの代わりにプログラム名を直接使用します。リボンでは、次のようになります。サービス名に基づいて、特定のサービスインスタンスを選択し、サービスインスタンスに従って要求する場合は、サービス名を特定のURLに置き換えます。コードは次のとおりです。
 

@Service
public class HelloService {

    @Autowired
    RestTemplate restTemplate;

    public String hiService(String name) {
        return restTemplate.getForObject("http://SERVICE-HI/hi?name="+name,String.class);
    }

}

コントローラーを作成し、コントローラーでHelloServiceを呼び出すメソッドを使用します。コードは、次のとおりです。


@RestController
public class HelloControler {

    @Autowired
    HelloService helloService;

    @GetMapping(value = "/hi")
    public String hi(@RequestParam String name) {
        return helloService.hiService( name );
    }
}


ブラウザでhttp:// localhost:8764 / hi?name = forezpに複数回アクセスすると、ブラウザに次のように交互に表示されます。

こんにちはforezp、私はポートからです:8762

こんにちはforezp、私はポートからです:8763

これは、restTemplate.getForObject( "http:// SERVICE-HI / hi?name =" + name、String.class)メソッドを呼び出すと、負荷分散が行われ、さまざまなポートのサービスインスタンスにアクセスしたことを示しています。

第四に、この時の建築

å¨è¿éæå¥å¾çæè¿°

  • サービスレジストリ、eurekaサーバー、ポート8761
  • service-hiプロジェクトは、サービスレジストリに登録されたポート8762と8763でそれぞれ2つのインスタンスを実行しました。
  • サービスリボンポートは8764です。サービス登録センターに登録してください
  • sercvice-ribbonがrestTemplateを介してservice-hiのhiインターフェイスを呼び出すと、リボンは負荷分散に使用されるため、service-hiが順番に呼び出されます。2つのポート8762と8763のhiインターフェイス。


ソースのダウンロード:https//github.com/forezp/SpringCloudLearning/tree/master/sc-f-chapter2

続きを読む

歴史上最も単純なSpringCloudチュートリアルの要約

SpringBootチュートリアルの概要

Javaインタビューの質問の要約

5、参考資料

この記事は以下に言及しています:

http://blog.csdn.net/forezp/article/details/69788938

http://cloud.spring.io/spring-cloud-static/Finchley.RELEASE/single/spring-cloud.html

 

おすすめ

転載: blog.csdn.net/u014225733/article/details/100537880