前回の記事では、サービスの登録と発見についてお話しました。マイクロサービスアーキテクチャでは、ビジネスは独立したサービスに分割され、サービスとサービス間の通信は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
続きを読む
5、参考資料
この記事は以下に言及しています:
http://blog.csdn.net/forezp/article/details/69788938
http://cloud.spring.io/spring-cloud-static/Finchley.RELEASE/single/spring-cloud.html