私たちは、Netflix EurekaとSpring Config ServerでSpring Cloud Angel.SR6を使用しています。私たちのマイクロサービスの1つは、ピアを見つけるための発見メカニズムとしてユーレカを使用する分散システムです。複数のインスタンスが並行して起動されているときに正しい方法でシステムを起動するには、どのノードが最初に起動したのかを知りたい。ユーレカのアプリケーション情報にはいくつかのタイムスタンプが含まれていますが、ユーレカのクライアントがステータスを更新すると変更されるため、頼りにならないようです。ユーレカメタデータのスタートアップタイムスタンプ
私たちのアイデアは、EurekaInstanceConfigBean
を使用して達成したユーレカmetadataMap
に独自のブートタイムスタンプを登録させることです。ただし、この方法では、タイムスタンプがプロセスで遅すぎます。インスタンスはタイムスタンプなしでユーレカに最初に表示されます。これは私たちには十分ではありません(そしてたとえそうであっても、素晴らしい解決策になるまでには時間がかかります)。
私たちが代わりにしようとしているのは、最初のユーレカ登録にタイムスタンプを入れることです。私たちは何とかすべてがうまくいく、ここにタイムスタンプを得ることができるので、もしbootstrap.properties
で宣言されたプロパティは、含まれています:
我々はSpring Cloud Documentationで述べたアプローチを使用してカスタムPropertySourceLocator
を追加しようとしましたeureka.instance.metadataMap.bootTimestamp=<here we want the timestamp>
、まだ運。最初のユーレカの登録は、PropertySourceLocatorが初期化される前に行われ、もう一度遅すぎます。
最初のユーレカ登録前にブートタイムスタンプを取得して、ユーレカにタイムスタンプなしで表示されないようにするにはどうすればよいですか?