問題タブ [consul-kv]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
consul - Consul KV ストア エンドポイント
Consulを使用して動的な方法でアプリケーション構成を管理する必要がある小さなプロジェクトの設計に取り組んでいます。これにより、すべてのアプリ マシンが矛盾の問題なしに同時に構成を取得できるようになります。私たちはConsul
すでにサービス検出の目的で使用しているので、それについてもっと読んでいてKey/Value
、構成を管理するために使用できるストアがあるようです.
Consul は既に稼働していますKey/Value
。ストア タブをクリックすると、以下の URL が表示されます。
私はConsul
今のところコマンドラインを通して以下のことをしようとしています:
- Consul で新しいキー/値を作成します。
- 既存のキーの値を更新します。
- 既存のキーを監視して、値が変更された場合に通知を受け、そのキーの新しい値を表示できるようにします。
現在、UIを介していくつかの値で作成されたキーがすでにいくつかあるため、そのキーの値を取得することを考えていました。以下は画像ですが、コマンドラインでこのキーの値を取得する方法について混乱しています:
以下のcurl呼び出しで試しましたが、取得した値が得られません404 Not Found
か? 私はここで何か悪いことをしていますか?
また、新しいキー/値を作成し、コマンドラインから既存のキーを監視するにはどうすればよいですか?
spring-integration - Spring Integration トランスフォーマーから読み取った Consul KV
ブートストラップで以下を設定し、コードで @Value("${configvalue}") を使用して読み取り、consul KV ストアにアクセスしようとしています。
これは、Rest Controller 内で使用するとうまく機能します。しかし、kafka リスナーとそこから始まる統合フローがあり、この @Value("${configvalue}") 内の transform にアクセスする必要がありますか? これは常に null になります。ただし、別のメソッドで get HTTP 呼び出しを使用して値を確認できます。
c# - 一度に 1 台のマシンで同期タスクを実行するために Consul を使用する方法は?
10 台のマシンを備えたシステムがあり、各マシンで特定のタスクを 1 つずつ同期順に実行する必要があります。基本的に、特定の時間にそのタスクを実行できるマシンは 1 台だけです。すでにConsul
別の目的で使用していますが、これを使用できるConsul
かどうかを考えていました。
詳細を読むと、各マシンがロックを取得し、作業を行ってからロックを解放しようとする領事でリーダー選挙を使用できるようです。作業が完了すると、ロックが解放され、他のマシンが再度ロックを取得して同じ作業を実行しようとします。このようにして、すべてが一度に 1 台のマシンで同期されます。
C#
PlayFab ConsulDotNet
この機能が既に組み込まれているこのライブラリを使用することにしましたが、より良いオプションが利用可能な場合は、それも受け入れます。私のコードベースの下Action
のメソッドは、ほぼウォッチャーメカニズムを介して同時に各マシンで呼び出されます。
上記のメソッド内で、以下のことを行う必要があります-
- ロックの取得を試みます。ロックを取得できない場合は、他のマシンがロックを取得している可能性があるため、それを待ちます。
- ロックが取得された場合、DoTheWork()。
- 作業が完了したら、ロックを解放して、他のマシンがロックを取得して同じ作業を行えるようにします。
アイデアは、10台のマシンすべてがDoTheWork()
一度に1つずつ同期する必要があるということです。このブログと このブログに基づいて、ニーズに合わせて例を変更することにしました-
以下は私のLeaderElectionService
クラスです:
以下は私のLeaderChangedEventArgs
クラスです:
上記のコードには、私のユースケースには必要ないかもしれない多くの部分がありますが、考え方は同じです。
問題文
今私のAction
メソッドでは、上記のクラスを使用して、ロックが取得されるとすぐにタスクを実行したいと思います。それ以外の場合は、ロックを待ち続けます。作業が完了したら、セッションを解放して破棄し、他のマシンがセッションを取得して作業できるようにします。以下のメソッドで上記のクラスを適切に使用する方法について、私はちょっと混乱しています。
私は最近作業を始めたので、このライブラリC#
を使用して本番環境でこれを効率的に機能させる方法についてちょっと混乱しています。Consul
アップデート
あなたの提案に従って以下のコードを試してみましたが、これも以前に試したと思いますが、何らかの理由でこの行 await distributedLock.Acquire(cancellationToken);
に移動するとすぐに、自動的にメインメソッドに戻ります。Doing Some Work!
プリントアウトに進むことはありません。CreateLock
実際に動作しますか?私はそれがdata/lock
consulで作成され(そこにないため)、そのロックを取得しようとし、取得された場合は作業を行ってから他のマシンに解放することを期待していますか?