まず第一に、異なるマイクロサービス間のインターフェイスの相互呼び出しを完了するには、その機能が何であるかを理解する必要があります。
サービスコール
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 サポートを有効にします。
#开启Feign对Sentinel的支持
#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 を削除します。