記事ディレクトリ
一、春雲
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秒)