2016-06-21 1 views
0

私たちは、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が初期化される前に行われ、もう一度遅すぎます。

最初のユーレカ登録前にブートタイムスタンプを取得して、ユーレカにタイムスタンプなしで表示されないようにするにはどうすればよいですか?

答えて

0

私たちは完全に回避策を見つけることはできませんでした。環境変数またはシステムプロパティにタイムスタンプを渡すことで、ユーレカのメタデータの初期登録にタイムスタンプを含めることができます。

(Linuxの/ bashのを仮定して)コマンドライン:

BOOT_TIMESTAMP=$(date +%s%3N) java ... 

bootstrap.properties:

eureka.instance.metadataMap.bootTimestamp=${boot.timestamp:0} 
関連する問題