Spring MVC システムを書き直しています。
このシステムは、単純に [Gateway<->Backend Services<->Databases]のようなものです。ここで、Gateway は単に認証とリクエストをバックエンド サービスに転送するためのコントローラーです。
バックエンド サービスはマイクロ サービスにリファクタリングされます。Eureka サービスを使用して、それぞれの登録を行います。したがって、最終的にアーキテクチャは[ゲートウェイ <-> Eureka <-> バックエンド マイクロサービス <-> データベース] になります。Gateway は Eureka サーバーからレジストリを検索し、マイクロ サービスを呼び出します。
ただし、Gateway は Spring Boot アプリケーションではありません (Spring Boot として書き直されることはありません)。そのため、Spring の eureka 機能 (@EnableEurekaClient 、DiscoveryClient など) を例のように簡単に採用できるとは思いません。実際に、ゲートウェイのコントローラーに eureka クライアント アノテーションを追加しようとしたところ、アプリケーションが崩壊しました。
さらに、クライアント側の負荷分散のために Gateway にリボンが必要です。しかし、上記と同じ懸念があります。
//11 月 1 日に更新 。Eureka サーバーとクライアントをセットアップしました。どちらも Spring Boot で記述されています。Spring MVC のテストには、これら 2 つのアプリケーションを使用しています。サーバーとクライアントは正常に動作しています。
サーバーの構成 application.propertiesは次のとおりです
server.port=8761
spring.application.name=service-itself
eureka.client.service-url.default-zone=http://localhost:8761/eureka/
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=false
logging.level.com.netflix.eureka=OFF
logging.level.com.netflix.discovery=OFF
クライアントは以下の通りです: application.yml
spring:
application:
name: say-hello
server:
port: 8090
eureka:
client:
service-url:
defaultZone: http://${eureka.host:localhost}:${eureka.port:8761}/eureka/
Eureka ダッシュボード localhost:8761 にアクセスすると、クライアントが登録されていることがわかります。
Spring MVC ゲートウェイは Spring ブート プロジェクトではないため、Eureka サーバーに接続して登録済みの「say-hello」クライアントのインスタンスを取得できるかどうかをテストするためだけに、例をプロジェクトにコピーしました。残念ながら、サンプル クラスの 76 行目に出力されている「eureka から対話するサンプル サービスのインスタンスを取得できません」というメッセージでは、そうすることができません。
これは、ゲートウェイのクラスパスに配置された eureka-client.properties です。Client クラスが設定ファイルを読み込んでいることが確認できました。
eureka.name=gatewayEurekaClient
eureka.vipAddress=say-hello
eureka.port=8761
eureka.preferSameZone=true
eureka.preferSameZone=true
eureka.shouldUseDns=false
eureka.serviceUrl.default=http://localhost:8761/eureka
eureka.serviceUrl.defaultZone=http://localhost:8761/eureka
また、これはnew DiscoveryClient(applicationInfoManager, clientConfig);時のデバッグ情報です。実行中です
instanceInfo InstanceInfo (id=234)
actionType null
appGroupName "UNKNOWN" (id=246)
appName "GATEWAYEUREKACLIENT" (id=247)
asgName null
countryId 1
dataCenterInfo PropertiesInstanceConfig$1 (id=248)
healthCheckExplicitUrl null
healthCheckRelativeUrl "/healthcheck" (id=253)
healthCheckSecureExplicitUrl null
healthCheckUrl "http://A156N7AB89AXNZQ:8761/healthcheck" (id=254)
homePageUrl "http://A156N7AB89AXNZQ:8761/" (id=255)
hostName "A156N7AB89AXNZQ" (id=256)
instanceId "A156N7AB89AXNZQ" (id=256)
ipAddr "10.209.66.64" (id=257)
isCoordinatingDiscoveryServer Boolean (id=258)
isInstanceInfoDirty false
isSecurePortEnabled false
isUnsecurePortEnabled true
lastDirtyTimestamp Long (id=260)
lastUpdatedTimestamp Long (id=263)
leaseInfo LeaseInfo (id=264)
metadata ConcurrentHashMap<K,V> (id=266)
overriddenstatus InstanceInfo$InstanceStatus (id=267)
port 8761
secureHealthCheckUrl null
securePort 443
secureVipAddress null
secureVipAddressUnresolved null
sid "na" (id=270)
status InstanceInfo$InstanceStatus (id=271)
statusPageExplicitUrl null
statusPageRelativeUrl "/Status" (id=272)
statusPageUrl "http://A156N7AB89AXNZQ:8761/Status" (id=273)
version "unknown" (id=274)
vipAddress "say-hello" (id=275)
vipAddressUnresolved "say-hello" (id=275)
アイデアが不足しています。誰でもこの問題に手を貸してもらえますか?