[マイクロサービス] Spring Cloud、Eureka 登録センター、Eureka クラスター、Eureka 自己保護メカニズムの最初の理解

一、春雲

1. スプリング クラウドとは
Spring Cloud 公式 Web サイト
Spring Cloud は、分散システムの構築を簡素化するためのツール セットである Spring Boot に基づいて構築されています。
Spring Cloud の主なサブプロジェクト:
①Spring Cloud Netflix: Eureka、Ribbon、Hystrix、Zuul、Feign、Archaius などのさまざまな OOS コンポーネントを統合します。 ②
Spring Cloud Config: Git の使用をサポートする構成管理ツールです。構成コンテンツを保存するために使用. 初期展開の外部ストレージを実現し、クライアント構成情報の更新、暗号化および復号化などの構成コンテンツをサポートするために使用します. ③ Spring Cloud Starter: Spring Cloud の基本コンポーネントは、Spring Boot に基づく基本的な依存モジュールです
。 2.
Spring Cloud の特徴
(1) 使いやすい
(2) フル機能
(3) 拡張と保守が容易
(4) さまざまな環境で使用可能
3. Spring Boot と Spring Cloud のバージョン間の互換性
ここに画像の説明を挿入
4. Devtools のホット デプロイメント
ここに画像の説明を挿入
(1) ) モジュールは Devtools の依存関係を追加します

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
    <optional>true</optional>
</dependency>

(2) 親プロジェクトにプラグインを追加する

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <fork>true</fork>
                <addResources>true</addResources>
            </configuration>
        </plugin>
    </plugins>
</build>

(3) 開くためのショートカット キー: をctrl+shift+alt+/選択しRegistry、次の 2 つの列を確認します。次に、アイデアを閉じて再起動すると、構成が有効になります。
ここに画像の説明を挿入
5. プロジェクトのリファクタリング
(1) 新しいモジュールを作成し、pom.xml の依存関係を導入する

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>cn.hutool</groupId>
        <artifactId>hutool-all</artifactId>
        <version>5.1.0</version>
    </dependency>
</dependencies>

(2) エンティティ (完全なクラス名を含む) をコピーし、maven コマンドで clean をクリックしてインストール
(3) 元のエンティティを削除し、次の依存関係をそれぞれ追加して、再構築が完了します。

<dependency>
	<groupId>org.example</groupId>
	<artifactId>cloud-api-commons</artifactId>
	<version>${project.version}</version>
</dependency>

ここに画像の説明を挿入

2. ユーレカ登録センター

ここに画像の説明を挿入
Eureka は Netflix が開発したサービス検出フレームワークであり、それ自体が REST ベースのサービスです。2 つの主要なコンポーネントが含まれています。
(1)サービス登録センターとも呼ばれるサーバー検出コンポーネント (Eureka Server): 主にサービス登録機能を提供します
(2) クライアント検出コンポーネント(Eureka Client): 主にサービス登録と検出の処理に使用されます
。サービス登録センターを構築するには:
① サーバー プロジェクト pom.xml は以下に依存します。

<!--除了SpringBoot和SpringCloud之外必须的依赖外,还要此依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

②設定ファイル application.yml

server:
  port: 7001  #端口号
eureka:
  instance:
    hostname: localhost #实例名
  client:
    register-with-eureka: false #不向注册中心注册自己
    fetch-registry: false #false表示自己就是注册中心,职责就是维护注册实例
    service-url:
      defaultZone: http://${
    
    eureka.instance.hostname}:${
    
    server.port}/eureka/  #注册中心的地址

③Spring Bootのコアクラスの注釈@EnableEurekaServer
2.クライアントコンポーネントの作り方
①サーバーサイドエンジニアリング pom.xmlの依存関係

<!--除了SpringBoot和SpringCloud之外的依赖,还需要引入该依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

②設定ファイル application.yml

server:
  port: 8001  #Eureka实例的端口号
spring:
  application:
    name: cloud-payment-service #指定实例的名称  
eureka:
  instance:
    prefer-ip-address: true
  client:
    register-with-eureka: true  #向注册中心注册自己
    fetch-registry: true  #false表示自己就是注册中心,职责就是维护注册实例
    service-url:
      defaultZone: http://localhost:7001/eureka/  #指定eureka的服务端地址

③Spring Bootのコアクラスに関する注釈:@EnableEurekaClient
3. Eurekaクラスタ
機能:高可用性、相互登録、相互監視
ここに画像の説明を挿入
(1) Eurekaクラスタ登録センター設定ファイル application.yml

server:
  port: 7001  #端口号
eureka:
  instance:
    hostname: eureka7001.com #实例名
  client:
    register-with-eureka: false #不向注册中心注册自己
    fetch-registry: false #false表示自己就是注册中心,职责就是维护注册实例
    service-url:
      defaultZone: http://eureka7002.com:7002/eureka/  #端口号相互注册,注册中心的地址

(2) サービスプロバイダのクラスタ構成ファイル application.yml

server:
  port: 8001  #Eureka实例的端口号
spring:
  application:
    name: cloud-payment-service #指定实例的名称
eureka:
  instance:
    prefer-ip-address: true
  client:
    register-with-eureka: true  #向注册中心注册自己
    fetch-registry: true  #false表示自己就是注册中心,职责就是维护注册实例
    service-url:
      #defaultZone: http://localhost:7001/eureka/  #指定eureka的服务端地址
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/  #eureka集群

(3) サービス利用は一つだけ、設定ファイルはapplication.yml

server:
  port: 80
spring:
  application:
    name: cloud-order-service
eureka:
  instance:
    prefer-ip-address: true
  client:
    register-with-eureka: true  #向注册中心注册自己
    fetch-registry: true  #false表示自己就是注册中心,职责就是维护注册实例
    service-url:
      #指定eureka的服务端地址
      #defaultZone: http://localhost:7001/eureka/
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/  #eureka集群

(4) サービス利用者の構成クラスに負荷分散アノテーションを追加する@LoadBalanced

@Configuration
public class ApplicationContextConfig {
    
    
    @Bean
    @LoadBalanced   //实现调用订单服务时服务的负载均衡
    public RestTemplate getRestTemplate(){
    
    
    //RestTemplate是Spring提供的用于访问Rest服务的客户端实例,它提供了多种便捷访问远程Http服务的方法,只需要传入url及返回值类型即可。
        return new RestTemplate();
    }
}

(5) クライアント コンポーネントのサービス名を指定するには、マイクロサービスに対応する構成ファイル application.yml に構成を追加します。

server:
  port: 8001  #Eureka实例的端口号
spring:
  application:
    name: cloud-payment-service #指定实例的名称
eureka:
  instance:
    prefer-ip-address: true	#选中时是否显示主机的Ip
    instance-id: payment8001  #指定id
  client:
    register-with-eureka: true  #向注册中心注册自己
    fetch-registry: true  #false表示自己就是注册中心,职责就是维护注册实例
    service-url:
      #defaultZone: http://localhost:7001/eureka/  #指定eureka的服务端地址
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/  #eureka集群

4. Service Discovery ディスカバリー
機能: Eureka に登録されたマイクロサービスに対して、サービスディスカバリーによりサービス情報を取得することができます
手順:
① サービスプロバイダーに対応するコントローラーに、以下の内容を追加します。

@RestController
@Slf4j	//日志记录
public class PaymentController {
    
    
	@Resource
    private DiscoveryClient discoveryClient;
    @GetMapping("/payment/discovery")
    public Object discovery() {
    
    
        //获取服务
        List<String> services = discoveryClient.getServices();
        for(String element: services) {
    
    
            log.info("*******element**********"+element);
        }
        //获取服务的实例
        List<ServiceInstance> instances = discoveryClient.getInstances("cloud-payment-service");
        for (ServiceInstance instance: instances) {
    
    
            log.info(instance.getInstanceId()+"\t"+instance.getHost()+"\t"+instance.getPort()+"\t"+instance.getUri());
        }
        return this.discoveryClient;	//返回当前的实例
    }
}

②サービスプロバイダのメインスタートアップクラスにアノテーションを追加します。@EnableDiscoveryClient

@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient  //开启服务发现
public class PaymentMain8001 {
    
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(PaymentMain8001.class,args);
    }
}

5. Eureka 保護メカニズム
特定の瞬間にサービスが利用できなくなった場合、Eureka はすぐにサービスをクリーンアップせず、現在のサービスの情報を保持します。CAP の AP ブランチに属します。
自己保護モード (デフォルトで有効) では、Eureka Server はサービス レジストリ内の情報を保護し、サービス インスタンスをログアウトしなくなります。
自己防衛を禁止するには?
ここでは、スタンドアロンの登録センターを例に取り上げます。
①登録センターの application.yml 構成

server:
  port: 7001  #端口号
eureka:
  instance:
    hostname: eureka7001.com #实例名
  client:
    register-with-eureka: false #不向注册中心注册自己
    fetch-registry: false #false表示自己就是注册中心,职责就是维护注册实例
    service-url:
      defaultZone: http://eureka7002.com:7002/eureka/  #注册中心的地址
  server:
    enable-self-preservation: false #false关闭自我保护机制,保证不可用的服务被及时移除
    eviction-interval-timer-in-ms: 2000 #单位:毫秒

②サービスプロバイダのapplication.yml構成

server:
  port: 8001  #Eureka实例的端口
spring:
  application:
    name: cloud-payment-service #指定实例的名称
eureka:
  client:
    register-with-eureka: true  #向注册中心注册自己
    fetch-registry: true  #false表示自己就是注册中心,职责就是维护注册实例
    service-url:
      defaultZone: http://localhost:7001/eureka/  #指定eureka的服务端地址
      #defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/  #eureka集群
  instance:
    instance-id: payment8001  #指定id
    prefer-ip-address: true #是否选中的时候显示主机的ip
    lease-expiration-duration-in-seconds: 2 #Eureka服务端在接收到客户端发送的最后一次心跳后的等待时间,超时将清除服务(默认:90秒
    lease-renewal-interval-in-seconds: 1  #Eureka客户端向服务端发送心跳的时间间隔(默认:30秒)

おすすめ

転載: blog.csdn.net/weixin_46081857/article/details/123477202
おすすめ