ユーレカ(サービス登録と発見)
一つ、ユーレカの基礎知識
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