SpringCloudマイクロサービスアーキテクチャの最も単純で失礼な説明:リボンの使用

1.環境への準備

「EurekaUseofSpringCloud」では引き続きEurekaクラスター環境を使用しています。

1.まず、ここに春の雲の親のpomプロジェクトがあります

2. spring-cloud-eureka-server Eureka Serverサブプロジェクトの場合、このポートの90から開始します

ここでのクラスターは、ポート9090とポート9091の2つのサービスインスタンスで構成されています。

3.spring-cloud-user-service-consumerユーザーサービス(つまり、サービスコンシューマー)。ここでは、最初にポート80を使用します。

4.spring-cloud-order-service-providerサービスを提供するための注文(サービスプロバイダー)ここでは、ポート番号70を使用します

注文サービスプロバイダーも、7070と7071の2つのインスタンスで構成されています

SpringCloudマイクロサービスアーキテクチャの最も単純で失礼な説明:リボンの使用

 

2.spring-cloud-eureka-server

spring-cloud-parent親プロジェクトとEurekaサーバーサービスspring-cloud-eureka-serverを移動する必要はありません。その後、それぞれポート9090とポート9091でEurekaサーバーを起動します。

SpringCloudマイクロサービスアーキテクチャの最も単純で失礼な説明:リボンの使用

 

3.注文サービス(サービスプロバイダー)

3.1 application.yml

ここでは、springbootプロファイルプロファイル機能を使用して、注文プロバイダーサービスspring-cloud-order-service-providerをさまざまなポートに分割します

spring:
  application:
    name: spring-cloud-order-service-provider
---
spring:
  profiles: p1
eureka:
  client:
    service-url:
      defaultZone: http://EurekaServerA:9090/eureka,http://EurekaServerB:9091/eureka
    fetch-registry: true
    register-with-eureka: true
  instance:
    prefer-ip-address: true   # 使用ip注册
    #自定义实例显示格式,添加版本号
    instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}:@project.version@
server:
  port: 7070
---
spring:
  profiles: p2
eureka:
  client:
    service-url:
      defaultZone: http://EurekaServerA:9090/eureka,http://EurekaServerB:9091/eureka
    fetch-registry: true
    register-with-eureka: true
  instance:
    prefer-ip-address: true   # 使用ip注册
    #自定义实例显示格式,添加版本号
    instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}:@project.version@
server:
  port: 7071

そして、開始するアイデアを構成します

SpringCloudマイクロサービスアーキテクチャの最も単純で失礼な説明:リボンの使用

 

SpringCloudマイクロサービスアーキテクチャの最も単純で失礼な説明:リボンの使用

 

3.2コントローラー

現在のサービスのポートを返すようにコントローラーを変更します。これにより、監視に役立ちます

@RestController
@RequestMapping("/order/data")
public class OrderStatisticServiceController {
    @Value("${server.port}")
    private Integer port;
    /**
     * 根据用户id获取今日完单数
     * @param id 用户ID
     * @return  完单数
     */
    @GetMapping("/getTodayFinishOrderNum/{id}")
    public Integer getTodayFinishOrderNum(@PathVariable("id") Integer id){
        return port;
    }
}

3.3開始

注文サービスプロバイダー7070および7071サービスをそれぞれ開始すると、2つのサービスプロバイダーがEurekaサーバーに登録されていることがわかります。

SpringCloudマイクロサービスアーキテクチャの最も単純で失礼な説明:リボンの使用

 

4.ユーザーサービス(サービス発信者)

発信者サービスの注文:spring-cloud-user-service-consumer:8080

4.1 RestTemplateConfiguration

RestTemplate構成クラスでRestTemplateを挿入するメソッドに注釈@LoadBalancedを追加する必要があります

@Configuration
public class RestTemplateConfiguration {
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return  new RestTemplate();
    }
}

Eurekaクライアントパッケージはリボン関連の依存関係を導入するのに役立つため、ここでリボンの依存関係を追加する必要はありません。

SpringCloudマイクロサービスアーキテクチャの最も単純で失礼な説明:リボンの使用

 

4.2コントローラー

ここでは、呼び出すサービスの名前を呼び出しURLに書き込むだけで、リボンがサービスリストから適切なサービス呼び出しを見つけるのに役立ちます。

@RestController
@RequestMapping("/user/data")
public class UserCenterController {
    @Autowired
    private RestTemplate restTemplate;
    @GetMapping("/getTodayStatistic/{id}")
    public Integer getTodayStatistic(@PathVariable("id") Integer id){
        String url  ="http://spring-cloud-order-service-provider/order/data/getTodayFinishOrderNum/"+id;
        return restTemplate.getForObject(url, Integer.class);
    }
}

4.3テストを開始する

SpringCloudマイクロサービスアーキテクチャの最も単純で失礼な説明:リボンの使用

 

2回電話をかけ、それぞれ7071と7070を返しました。これは、リボンが機能していることを示しています。

SpringCloudマイクロサービスアーキテクチャの最も単純で失礼な説明:リボンの使用

 

SpringCloudマイクロサービスアーキテクチャの最も単純で失礼な説明:リボンの使用

 

4.4負荷分散戦略を調整する

デフォルトの負荷分散戦略は次のとおりです。ZoneAvoidanceRule:ゾーントレードオフ戦略。次に、構成を通じて他の負荷分散戦略を使用できます。たとえば、ランダム戦略を使用します。

application.yml中配置

これは、サービスspring-cloud-order-service-provider用です。

spring-cloud-order-service-provider:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

出典:CSDNブロガー「$ code out ofthefuture」

元のリンク:https://blog.csdn.net/yuanshangshenghuo/java/article/details/106975354

おすすめ

転載: blog.csdn.net/yunduo1/article/details/109116659