web-dev-qa-db-ja.com

ユーレカはサービスの登録を解除しません

現在、ユーレカが登録済みサービスの登録を解除しないという問題に直面しています。 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は、インスタンスが存在しないときに、インスタンスが誤ってクレームされる場合があります。更新はしきい値よりも少ないため、インスタンスは安全であるために期限切れになりません。

この動作を防ぐにはどうすればよいですか?

32
lp1776

自己保存モードが実際に無効になることは決してないことに気付きました。実際のプロパティは

eureka.server.enableSelfPreservation=false

DefaultEurekaServerConfig Codeを参照)、どこにもドキュメントがありません。これで問題が解決しました。

39
lp1776

以下の値を設定して、サービスの登録解除作業を行いました

Eurekaサーバーapplication.yml

eureka:
  server:
    enableSelfPreservation: false

サービスapplication.yml

eureka:
  instance:
    leaseRenewalIntervalInSeconds: 1
    leaseExpirationDurationInSeconds: 2

完全な例はこちら https://github.com/ExampleDriven/spring-cloud-eureka-example

26
Peter Szanto