問題タブ [vertx-verticle]

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.

0 投票する
2 に答える
755 参照

vert.x - Vertx - イベント処理のための複数の頂点と単一の頂点

シナリオ

Vertx イベントバスの特定の「アドレス」でメッセージを受信しました。メッセージには 4 つのタイプがあります。ハンドラーはメッセージを処理し、結果を別のイベントバス「アドレス」に送信する必要があります。そのハンドラーはそれを外部サービス API にポストします。

問題

このための Verticle の設計方法は? 以下に 2 つのアプローチについて説明しました。これが Kubernetes にデプロイされることを考えると、どちらが効率的で、高速で、適切にスケーリングできます。ワーカーバーティクルはどうですか?私が見逃している他の効果的なアプローチはありますか?

アプローチ

  1. イベントバス コンシューマーがこのタイプを消費して処理するように、各タイプのバーチクルを記述します。処理されたデータを「external-service-call」アドレスに送信します。
  2. 1 つのバーティクルのみを書き込みます。イベントバス ハンドラーは、メッセージのタイプに基づいて適切なメソッドを決定して呼び出し、最終的にそれを「外部サービス呼び出し」アドレスに発行します。

私の理解では、そのバーチクルの複数のインスタンスをデプロイすることで、2 番目のアプローチを拡張できます。スケーリングとは、これが同時に多くのボリュームを受け入れて処理できることを意味しますか? 最初のアプローチはどうですか?

私が知っておくべきだと思う他のアプローチはありますか?

0 投票する
1 に答える
63 参照

vert.x - Vertx を使用した結果のグループの処理 - 調整方法は?

各ジョブには、完了するために異なる戦略を必要とする数千の個別のタスクが含まれるジョブ処理システムがあります。個々のタスクがジョブ全体を構成します。すべてのタスクが完了した場合、ジョブは正常に完了したとマークされ、他の手順が実行されます。いずれかのタスクが失敗した場合、ジョブは失敗とマークされ、他の手順が実行されます。ジョブがタイムアウトした場合、ジョブはマークされる必要があります失敗したため、他の手順が実行されます。

ジョブの結果をすべて受信したら、次のジョブを取得できます。ジョブが現在処理されている間は、次のジョブを取得しないでください。

フローは次のようになります。

ここに画像の説明を入力

Job Polling Verticle はジョブをイベント バスに発行し、Job Processing Verticle は各タスクをイベント バスに発行します。ジョブ戦略が完了すると、タスクの結果がイベント バスに発行されます。

問題は、このモデルですべてのタスクがいつ完了したかを判断する正しい方法がわからないことです。すべてのバーティクルはステートレスであり、Job Processing Verticle はフューチャーを待機しません。また、Job Results Verticle がステートフルであったとしても、予想される結果の数はわかりません。

これを行うために私が考えることができる唯一の方法は、グローバルなステートフル オブジェクトを持つことです。しかし、これは良いデザインではないと思います。

ここに画像の説明を入力

さらに、いつ Job がタイムアウトしたかを知る必要があります。つまり、必要以上に長く実行されているため、失敗したと見なしてログに記録し、先に進む必要があります。

グローバル状態でこれを行うことができましたが、これも正しい解決策ではないと思います。

この垂直パターンは、私がやろうとしていることに対して意味がありますか?

0 投票する
0 に答える
331 参照

groovy - Vert.x Future/Promise Handler が Groovy で呼び出されない

データベースに接続し、定期的にテーブルをポーリングしてオブジェクトをイベント バスに送信する必要がある非常に小さな Verticle を取得しました。これまでのところ、データベースに接続できますが、その後ハンドラーが実行されず、ポーリング タイマーが開始されません。それは明らかなことであり、あらゆる助けに感謝しています。

Futuresは非推奨であるため、Vert.x 3.8 Promisesを使用します(そのリンクの背後にある例のように)。私のコードでわかるように、非推奨の Futures を使用しても問題なく動作します! しかし、廃止されたコードを使用したい人はいますか? 私が何か間違ったことをしているのか、Vert.x のバグなのか、私が想定していないことです。

私の Vert.x は 3.8.1 です