現在、ユーレカが登録済みサービスの登録を解除しないという問題に直面しています。 Eurekaサーバーの例をGitハブから直接引き出して、1つの変更だけを行いました。eureka.enableSelfPreservation = false
。私のapplication.ymlは次のようになります。
server:
port: 8761
eureka:
enableSelfPreservation: false
client:
registerWithEureka: false
fetchRegistry: false
server:
waitTimeInMsWhenSyncEmpty: 0
登録済みのサービスの85%が15分以内にハートビートの配信を停止した場合、Eurekaは問題がネットワーク関連であると想定し、応答しないサービスを登録解除しないことを読みました。私の場合、実行しているサービスは1つだけなので、自己保存モードを無効にしました。私は突然プロセスを強制終了し、ユーレカは無期限の時間にサービスを登録したままにします。
クライアントのapplication.ymlは次のようになります。
eureka:
instance:
leaseRenewalIntervalInSeconds: 3
client:
healthcheck:
enabled: true
serviceUrl:
defaultZone: http://localhost:8761/eureka/
appInfo:
replicate:
interval: 3
initial:
replicate:
time: 3
spring:
rabbitmq:
addresses: ${vcap.services.${PREFIX:}rabbitmq.credentials.uri:amqp://${RABBITMQ_Host:localhost}:${RABBITMQ_PORT:5672}}
私の目標は、サービスが実行されていないことをユーレカがすばやく検出し、開始された別のサービスが自分自身をすばやく登録できるデモを作成することです。
現在、eurekaクライアントが起動すると、3秒で登録されます。サービスが突然終了すると、登録が解除されることはありません。サービスを強制終了すると、Eurekaダッシュボードに次のように表示されます。
緊急! EUREKAは、インスタンスが存在しないときに、インスタンスが誤ってクレームされる場合があります。更新はしきい値よりも少ないため、インスタンスは安全であるために期限切れになりません。
この動作を防ぐにはどうすればよいですか?
自己保存モードが実際に無効になることは決してないことに気付きました。実際のプロパティは
eureka.server.enableSelfPreservation=false
( DefaultEurekaServerConfig Codeを参照)、どこにもドキュメントがありません。これで問題が解決しました。
以下の値を設定して、サービスの登録解除作業を行いました
Eurekaサーバーapplication.yml
eureka:
server:
enableSelfPreservation: false
サービスapplication.yml
eureka:
instance:
leaseRenewalIntervalInSeconds: 1
leaseExpirationDurationInSeconds: 2
完全な例はこちら https://github.com/ExampleDriven/spring-cloud-eureka-example