ユーレカ(サービス登録・発見)簡単エントリー

ユーレカ(サービス登録と発見)

一つ、ユーレカの基礎知識

1、どのようなサービスガバナンス?

SpringCloudの最下層は、サービスガバナンスを実装するためにNetflixによって開発されたEurekaモジュールをカプセル化します。従来のRPCリモートコールフレームワークでは、各サービス間の依存関係を管理するのがより複雑であるため、サービスガバナンスが必要です。達成できるサービスとサービス間の依存関係を管理するサービスの呼び出し、負荷分散、フォールトトレランスなど。サービスの検出と登録を実装する

2.どのようなサービスの登録と発見ですか?

EurekaはCSの設計アーキテクチャを採用しています。EurekaServerはサービス登録機能のサーバーとして機能します。これはサービス登録センターです。システム内の他のサービスは、Eurekaのクライアントを使用して、Eurekaサーバーに接続し、ハートビート接続を維持します。このようにして、システムメンテナはEurekaサーバーを使用して、システム内の各マイクロサービスが正常に動作しているかどうかを監視できます。

サービスの登録と検出には、レジストリがあります。サーバーが起動すると、サーバーは自身のサーバーの現在の情報(たとえば、サービスアドレス、通信アドレスなど)をエイリアスの形式でレジストリに登録します。相手側(コンシューマー/サービスプロバイダー)は、エイリアスを使用してレジストリから実際のサービス通信アドレスを取得し、ローカルRPC呼び出しとリモートRPC呼び出しを実装します。レジストリは各サービス間の依存関係を管理するために使用されるため、フレームワークの中心的な設計アイデアはレジストリにあります(サービスガバナンスの概念)。RPCリモートフレームワークには、レジストリがあります(インターフェイスアドレスなどのサービスアドレス関連情報を格納するために使用されます)。

ここに画像の説明を挿入

3. Eurekaの2つのコンポーネント(EurekaサーバーとEurekaクライアント)

a)Eurekaサーバー(サービス登録を提供)

各マイクロサービスノードが構成によって開始されると、EurekaServerに登録されるため、EurekaServerのサービスレジストリには利用可能なすべてのサービスノード情報が保存され、サービスノード情報はページに直接表示されます。

b)Eurekaクライアント(レジストリからアクセス)

これは、Eurekaサーバーの相互作用を簡素化するために使用されるJavaクライアントです。クライアントには、ラウンドロビンロードアルゴリズムを使用するロードバランサーも組み込まれています。アプリケーションの起動後、ハートビートがEurekaサーバーに送信されます(デフォルトの期間は30秒です)。Eurekaサーバーが複数のハートビートサイクル(デフォルトでは90秒)内にノードのハートビートを受信しない場合、Eurekaサーバーはサービスレジストリからサービスノードを削除します。

次に、スタンドアロンのEurekaを構築します

1.マイクロサービスを作成します(cloud-eureka-server7001)

2.pom.xmlの依存関係を追加します

<?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">
    <parent>
        <artifactId>cloud2020</artifactId>
        <groupId>com.xuan.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-eureka-server7001</artifactId>


    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka-server -->
        <!--这里是eureka-server-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

        <!--公共的包依赖管理(如:公共的Entity(Bean)实体类包..)-->
        <dependency>
            <groupId>com.xuan.springcloud</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web  -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools -->
        <!--开发热部署工具包,方便开发中代码测试(修改Java代码服务器会自动发布重启)-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-test -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>

    </dependencies>
</project>

3.構成用のymlファイルを作成します(yml構文に厳密に従って構成する必要があります)

server:
  port: 7001

eureka:
  instance:
    hostname: eureka7001.com #eureka服务端的实例名称
  client:
    register-with-eureka: false  #false表示不向注册中心注册自己。
    fetch-registry: false #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
    service-url:
        #单机就是7001自己
      defaultZone: http://eureka7001.com:7001/eureka/

4.メインスタートアップクラスのmainメソッドからマイクロサービスを開始し、アクセスするアドレスを入力します:http:// localhost:7001 /

ここに画像の説明を挿入

3つ目は、マイクロサービスを作成してEurekaServerに登録することです。

1.マイクロサービスを作成します(cloud-provider-payment8001)

2.pom.xmlの依存関係を追加します

<?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">
    <parent>
        <artifactId>cloud2020</artifactId>
        <groupId>com.xuan.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-provider-payment8001</artifactId>

    <dependencies>
        <!--web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>

        <!--mysql-connector-java-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--jdbc-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>com.xuan.springcloud</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>
        <!--热部署工具-->
        <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>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--这里是eureka-client-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>

</project>

3.構成用のymlファイルを作成します(yml構文に厳密に従って構成する必要があります)

server:
  port: 8001


spring:
  application:
    name: cloud-payment-service
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource            # 当前数据源操作类型
    driver-class-name: org.gjt.mm.mysql.Driver              # mysql驱动包
    url: jdbc:mysql://localhost:3306/db2019?useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: root
    password: root


mybatis:
  mapperLocations: classpath:mapper/*.xml
  type-aliases-package: cn.xuan.springcloud.entities    # 所有Entity别名类所在包

eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      #单机版
      defaultZone: http://eureka7001.com:7001/eureka
  instance:
    instance-id: payment8001
    #访问路径可以显示IP地址
    prefer-ip-address: true
      #Eureka客户端向服务端发送心跳的时间间隔,单位为秒(默认是30秒)
    lease-renewal-interval-in-seconds: 1
    #Eureka服务端在收到最后一次心跳后等待时间上限,单位为秒(默认是90秒),超时将剔除服务
    lease-expiration-duration-in-seconds: 2

4.メインスタートアップクラスのmainメソッドからマイクロサービスを開始し、レジストリから監視し、アクセスするアドレスを入力します:http:// localhost:7001 /

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_45496190/article/details/107430171