SpringCloud マイクロサービスのエントリーケース

まず第一に、異なるマイクロサービス間のインターフェイスの相互呼び出しを完了するには、その機能が何であるかを理解する必要があります。
画像の説明を追加してください

サービスコール

1. Nacos 登録センターを運営する

1. Nacos のダウンロードとインストール
ダウンロード アドレス: https://github.com/alibaba/nacos/releases
2. Windows 起動 Nacos
リファレンス: https://github.com/alibaba/nacos
解凍: ダウンロードした圧縮パッケージを解凍し、
以下を開始します。 startup.cmd -mstandalone
3.
http://localhost:8848/nacosにアクセスします。

ユーザー名とパスワード: nacos/nacos

2. サービスディスカバリ

まず、springBoot プロジェクトを作成します。
1. 依存関係を導入し、
サービスベース モジュールで Nacos クライアントの依存関係を構成します。

<!--服务发现-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2. サービス構成情報の追加
登録センターに登録する必要があるマイクロサービスを構成ファイルに入れて構成を追加します(人間的に言うと、各マイクロサービスの構成ファイルに追加してnacosサービスに登録します) #spring
:
cloud :
nacos:
discovery:
server-addr:localhost:8848 # nacos サービスアドレス
3.
マイクロサービスの起動 登録されているマイクロサービスを起動し、「サービス管理 => サービス一覧」を確認すると、登録されているマイクロサービスが表示されます。
ここに画像の説明を挿入

3. 消費者側への OpenFeign の導入

サービスベースモジュールで OpenFeign 依存関係を構成します (実際には、OpenFeign 依存関係はサービスコンシューマ側で必要です)

<!--服务调用-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2. スタートアップ クラスにアノテーションを追加します
。 service-sms のスタートアップ クラスに次のアノテーションを追加して、リモートから呼び出すことができることを示します。

@EnableFeignClients

4番目、インターフェースのリモート呼び出し

service-sms にリモート呼び出しを追加
// @FeignClient(value = "service-core") は、どのサービスを呼び出すかを示します。 value はサービスの名前です
1、CoreUserInfoClient

@FeignClient(value = "service-core")
public interface CoreUserInfoClient {
    
    

    @GetMapping("/api/core/userInfo/checkMobile/{mobile}")
    boolean checkMobile(@PathVariable String mobile);
}

5、タイムアウト制御

openfeign のデフォルトの接続タイムアウトは 1 秒であり、テスト中にリモート呼び出しタイムアウト エラーが発生する可能性があります。
次の設定を設定ファイルに追加できます:
feign:
client:
config:
default:
connectTimeout: 10000 #接続タイムアウト設定
readTimeout: 600000 #実行タイムアウト設定

6. リモート呼び出しサービスが停止している可能性があります (サーバーが突然ハングアップしたが、それでもこのインターフェイスを呼び出したい)

融合とダウングレードのプロセスを採用しており、リモート呼び出しサービスがある場合は融合しており、このサービス内でインターフェイスを処理しない実装クラスを作成し、ユーザーにプロンプ​​トを表示するデータを返します。リモートインターフェイスにアクセスできないことは、次のローカルインターフェイスにもアクセスできます

最初のステップは、リモート呼び出しを必要とするサービスに依存関係を導入することです。

<!--服务容错-->
<dependency>
    <groupId>com.alibaba.cloud</groupId> 
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

2. Sentinel サポートを有効にする
service-sms の yml 設定ファイルで Feign の Sentinel サポートを有効にします。

#开启FeignSentinel的支持
#feign:
  sentinel:
    enabled: true

3. フォールトトレラントクラスを作成します// リモート呼び出しインターフェースが失敗した場合、ローカルインターフェースを呼び出してユーザーデータを提供します

@Service
@Slf4j
public class CoreUserInfoClientFallback implements CoreUserInfoClient {
    
    
    @Override
    public boolean checkMobile(String mobile) {
    
    
        log.error("远程调用失败,服务熔断");
        return false;
    }
}

4. ヒューズクラスの指定
フォールトトレランスクラスを指定せずに、OpenFeign リモート呼び出しインターフェースのフォールバック属性値を追加します

@FeignClient(value = "service-core", fallback = CoreUserInfoClientFallback.class)
public interface CoreUserInfoClient {
    
    

サービスゲートウェイ

まず最初に、その機能について説明します。同じポートの URL にアクセスし、異なるサーバーのインターフェイスにアクセスできます。

画像の説明を追加してください

1. モジュールservice-gatewayを作成します。

共通の Maven モジュール
アーティファクトを作成します: service-gateway
2. pom を設定します
。 api-gateway の pom に次の依存関係を追加します。

<dependencies>
    <!-- 网关 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
    <!--服务注册-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
</dependencies>

3.application.ymlを設定する

server:
  port: 80 # 服务端口

spring:
  profiles:
    active: dev # 环境设置
  application:
    name: service-gateway # 服务名
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # nacos服务地址
    gateway:
      discovery:
        locator:
          enabled: true # gateway可以发现nacos中的微服务,并自动生成转发路由

4. スタートアップクラスを作成する

@EnableDiscoveryClient は、ゲートウェイ マイクロサービスであることを示します

@SpringBootApplication
@EnableDiscoveryClient
public class ServiceGatewayApplication {
    
    

    public static void main(String[] args) {
    
    
        SpringApplication.run(ServiceGatewayApplication.class, args);
    }
}

5. 自動ルーティングと自動転送をテストする

http://localhost/service-core/admin/core/integralGrade/list
ルール:
http://Gateway_HOST:Gateway_PORT/serviceId/**
再度呼び出したくない場合は、上記のデフォルトのメソッドを使用して、ゲートウェイ。以下で実行できます ルーティングを自分で設定します

2. ルーティング設定

1.
ルーティング設定を基本設定の application.yml ファイルに追加します。

#spring:
# cloud:
#   gateway:
      routes:
      - id: service-core
        uri: lb://service-core
        predicates:
        - Path=/*/core/**
      - id: service-sms
        uri: lb://service-sms
        predicates:
        - Path=/*/sms/**
      - id: service-oss
        uri: lb://service-oss
        predicates:
        - Path=/*/oss/**

2. ルート転送のテスト
http://localhost/admin/core/integralGrade/list

ゲートウェイ構成にはクロスドメインの問題があり、@CrossOrigin が競合しているため、クロスドメインの問題を解決できません。
この問題を解決しましょう

3. クロスドメイン構成

APIゲートウェイにクロスドメイン構成を追加する

@Configuration
public class CorsConfig {
    
    
    @Bean
    public CorsWebFilter corsFilter() {
    
    
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true); //是否允许携带cookie
        config.addAllowedOrigin("*"); //可接受的域,是一个具体域名或者*(代表任意域名)
        config.addAllowedHeader("*"); //允许携带的头
        config.addAllowedMethod("*"); //允许访问的方式

        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);

        return new CorsWebFilter(source);
    }
}

2. バックエンドのクロスドメイン構成を削除します。
マイクロサービス内のクロスドメイン アノテーション @CrossOrigin を削除します。

おすすめ

転載: blog.csdn.net/qq_50319351/article/details/128595427