領事登録センター サービス すべてのサービス チェックの失敗と解決策

領事登録センター サービス すべてのサービス チェックに失敗しました

質問1:登録はできるが、エラーが発生し、ミドルウェアが利用できない

  • 現象:サービスを開始してアクセスできるが、登録センターに赤十字が表示されるAll service checks failing
  • 理由: ほとんどの場合、プログラムにエラーがあります
    • まず、サービスの起動ログを確認して、エラーがないかどうかを確認します.起動ログに明らかなエラーがある場合は、それに応じて解決できます.
    • 設定ファイルに設定されているミドルウェアのほとんどが接続できず、チェックに失敗する
    • たとえば、redisサービス接続障害、データベース接続障害、kafka接続障害が発生しました
  • 解決策: すべての依存ミドルウェアを開始して、通常のアクセスを確保します

質問 2: 登録はでき、エラーは報告されていませんが、検査に合格できません

  • 現象: これは、サードパーティのサービスを呼び出してサービスを提供する、新しく追加されたマイクロサービスです.バージョンSDKしかないため、このサービスはシステムにのみ展開でき、登録センターは内部にあり、ネットワークは開かれています. の単一のマイクロサービスが開始され、起動ログにエラー メッセージがなく、登録が成功しています。サービス インターフェイスは正常に呼び出すことができますが、登録センターに赤いバツ印があり、検証に失敗しますwindowsSDKwindowsconsullinuxwindowsAll service checks failing

  • 理由: 登録センターの情報を確認したところ、ヘルスチェックのアドレスが間違っていることがわかりました.それはイントラネットアドレス ( 192.168.1.x) であり、windowsマシンには複数のネットワークカードがありました.マシンのアドレスの1つがip代わりに取られました.実際の接続アドレス ( 183.169.xxx.xx)、その結果、ヘルスチェックhttpアクセス
    ここに画像の説明を挿入

  • 解決策: 構成ファイルで、ヘルス チェックのアドレスを直接指定し、それにアクセス可能なローカル IP を設定します。

spring:
  cloud:
    consul:
      discovery:
        health-check-url: http://183.169.xxx.xx:xxxx/management/health

質問3:同じサービスが何度も登録されている

  • 現象: サービスの再起動後、新しいマイクロサービスが追加され、以前のサービスは登録センターから削除されず、ヘルス ステータスも緑色になります。
  • 理由: InstantId が異なり、レジストリ サービスの監視で使用される URL が同じです
    • 乱数が追加されたサービスの InstantId。サービスが開始されるたびに新しい InstantId が生成されます。

    • InstantId は異なりますが、レジストリ サービスの監視で使用される URL は同じです

    • 同じマシンで再起動を繰り返すと、レジストリに参加するために異なるインスタント ID を持つ多くのサービスが追加され、監視に使用される URL は同じです.最新のサービスが正常に開始された後、レジストリの監視が渡され、残りの
      ここに画像の説明を挿入

    • 元の構成

spring:
  cloud:
    consul:
      discovery:
        healthCheckPath: /management/health
        instanceId: data-analysis:${spring.application.instance-id:${random.value}}
        service-name: data-analysis
  • サービス名が同じで InstantId が異なるサービスはすべてレジストリに追加され、すべて最新のマイクロサービスをチェックします
  • 解決策:乱数を削除するだけです
    • instanceId 行をコメントアウトし、IP ポート番号を使用して生成し服务名-ip地址-端口号instance-id一貫性が必要な場合は一貫していることを確認します (同じ IP ポート)
    • 追加heartbeat.enabled=truettlハートビート監視サービスの監視ステータスを使用
    • 変更された構成
spring:
  cloud:
    consul:
      discovery:
        healthCheckPath: /management/health
        instance-id: ${spring.application.name}-${spring.cloud.client.ip-address}-${server.port}
        service-name: ${spring.application.name}
        heartbeat:
          enabled: true # 为true使用 ttl 方式,默认false使用 http 方式

: ${spring.cloud.client.*} は、Spring Boot 構成ファイルが環境変数を読み取ることができる機能を使用しており、アプリケーションは Spring Boot アクチュエーターを統合する必要があります。

おすすめ

転載: blog.csdn.net/u010882234/article/details/129259852