ホームページ >Java >&#&チュートリアル >新しい Conductor Java クライアント v4 の発表
作成者: Miguel Prieto
今年の初めに、Python SDK が大幅に刷新されました。現在、他の Conductor SDK も大幅な再構築が行われており、大幅な設計の強化、パフォーマンスの向上、最適化された依存関係を備えた Java Client v4 を発表できることを嬉しく思います。
Java クライアント v4 では、設計を改善することで依存関係のフットプリントを削減しました。直接の依存関係を削除するために、フィルター、イベント、リスナーを追加しました。この設計上の決定は、クライアントの使用、拡張、保守を容易にするために慎重に検討された結果行われました。
さらに詳しくお読みください!
私たちは皆さんからのフィードバックを聞き、開発者のエクスペリエンスを向上させるために取り組んでいます。 Orkes と Conductor OSS コミュニティは 2 つの別々の Java クライアント/SDK プロジェクトを管理していましたが、どちらも業界の多くのプロジェクトと同様に、技術的負債が蓄積していました。私たちは、この負債に対処する適切な時期が来たと判断しました。
すぐに対処したい主な事項は次のとおりです。
1 つの Conductor Java クライアント (すべてを制御するため)
目標は、2 つの既存のプロジェクトを、それぞれの最も強力な要素を取り入れて、より管理しやすい統合ソリューションに統合することでした。これにより、アップデートの高速化、サポートの向上、より一貫した開発エクスペリエンスが実現されるはずです。
依存関係の最適化
コードのクリーンアップの一環として、いくつかの依存関係を削除しました:
ハードコーディングされた依存関係を削除することで、ユーザーと寄稿者は特定のライブラリやツールにロックされることなくクライアントを拡張できます。
さらなるモジュール化
モジュール性を高めるためにプロジェクトを再構築し、クライアントがより柔軟でカスタマイズしやすくなりました。
このモジュール式アプローチを使用すると、イベント、リスナー、フィルターを通じて、好みの監視、ロギング、または検出ツールを統合できます。これにより、カスタマイズが簡素化されるだけでなく、コードベースの保守性と将来性が向上し、開発者が必要に応じて独自の拡張機能を構築および拡張できるようになります。
コードのクリーンアップ/リファクタリング
よりクリーンなコードベースにより、今後の開発はより迅速になり、エラーが発生しにくくなり、コミュニティへの貢献も容易になります。
より良い例
特に例として、プロジェクト内にモジュールを導入しました。まだ開発中ですが、このモジュールは、これから始めようとしている場合でも、高度な使用例を探している場合でも、実用的な実際の例の中心的なリソースとして機能します。
公式 Conductor クライアントと SDK は現在、https://github.com/conductor-sdk に格納されています。ただし、Conductor OSS リポジトリ https://github.com の一部である OSS Java クライアント/SDK は例外です。 /orkes-io/orkes-conductor-client/tree/main.
今後、すべての Conductor クライアントと SDK は、最終的には conductor-oss/conductor リポジトリの同じ conductor-clients ディレクトリに格納されることになります。そこにアクセスして、Java クライアント/SDK v4 のソース コードを見つけてください。
Java Client v4 では、置き換えられる 2 つのプロジェクトと比較して、より合理化された効率的な依存関係セットが導入されています。
未使用、非推奨、不要な依存関係をすべて削除し、クラスパス汚染を大幅に削減しました。 この最適化により、ライブラリ間の競合のリスクが最小限に抑えられるだけでなく、全体的なパフォーマンスと保守性も向上します。 v4 は、依存関係ツリーを簡素化することにより、より使いやすく、よりスムーズにプロジェクトに統合できる、よりクリーンで軽量なクライアントを提供します。
TaskRunner がリファクタリングされました。 TaskPollExecutor は、ワーカーがタスクのポーリング、実行、更新に使用するスレッド プールを管理するという同じ中核的な役割を共有しているため、TaskPollExecutor に代わるものです。
これにより、Netflix Eureka と Spectator への直接の依存関係が削除され、イベント駆動型のメカニズムが導入され、ポーリングを行うかどうかを決定するコールバックである PollFilter が追加されました。さらに、エラー処理と同時実行性の管理が改善されました。
Eureka と Spectator を使用している場合は、心配する必要はありません。イベントとフィルターは、これらの優れたツールやライブラリとシームレスに統合するために提供されています。
Java クライアント v4 では、イベント、リスナー、フィルターを通じて拡張性が強化されています。これらは、メトリクスの追跡、ログ記録、監査、特定の条件に基づくカスタム アクションのトリガーなど、さまざまな目的に使用できます。
たとえば、Lambda 関数を PollFilter として使用して、Eureka によって報告されたインスタンスのステータスを確認できます。インスタンスが UP としてマークされている場合 (つまり、Eureka がインスタンスが正常で利用可能であるとみなしている場合)、ワーカーはタスクのポーリングを続行します。
さらに、PollCompleted イベントを処理するためにリスナーを登録できます。このシナリオでは、リスナーはイベントの詳細をログに記録し、Prometheus を使用してポーリング プロセスの期間を追跡し、詳細なメトリクスを追跡するためのラベルとしてタスク タイプを添付します。このアプローチにより、柔軟性が高まるだけでなく、クライアントの動作の可観測性と制御も向上します。
var runnerConfigurer = new TaskRunnerConfigurer .Builder(taskClient, List.of(new HelloWorldWorker())) .withThreadCount(10) .withPollFilter((String taskType, String domain) -> { return eurekaClient.getInstanceRemoteStatus().equals(InstanceStatus.UP); }) .withListener(PollCompleted.class, (e) -> { log.info("Poll Completed {}", e); var timer = prometheusRegistry.timer("poll_completed", "type", e.getTaskType()); timer.record(e.getDuration()); }) .build(); runnerConfigurer.init();
クライアントには、これらのイベントやリスナーの上に構築された MetricsCollector などの特殊なインターフェイスもいくつかあります。メトリクス コレクターの具体的な実装を間もなく提供する予定です。
OkHttp3 v4 は、Java 用の最も人気があり、評判の高い HTTP クライアントの 1 つです。 Java クライアント/SDK v4 にアップグレードすると、すぐに使用できる HTTP2 と Gzip がサポートされるようになり、より迅速な HTTP リクエストやデータ転送が可能になります。他にも優れたオプションはありますが、シンプルさ、パフォーマンス、信頼性のために OkHTTP が選択されました。
OkHttp のアップグレードに伴い、抽象化レイヤーの 1 つである Jersey を削除することも決定しました。 Jersey は、OkHttp のような単純な HTTP クライアントと比較して、機能が豊富ですが、重量も大きくなります。これらの機能の一部 (依存関係注入、フィルター、例外マッパーなど) は、基本的な HTTP リクエストを行うだけの場合は過剰になる可能性があります。
クライアントは、オープンソース コミュニティへのサポートを第一に維持しながら、OSS Conductor と Orkes Conductor の間のシームレスな統合を促進し、ユーザーがニーズの進化に応じて柔軟に切り替えることができるようにします。
Orkes クライアント モジュールは、HeaderSupplier を介した認証を追加することで、単純に Conductor クライアントを拡張します。
Client v4 でワーカーを作成したが、Orkes Conductor を試してみたい OSS ユーザーの場合、orkes-conductor-client 依存関係をプロジェクトに追加し、OrkesAuthentication をヘッダー サプライヤーとして使用してクライアントをインスタンス化するだけです。 OSS に戻すのは、ヘッダー サプライヤーを削除するだけで簡単です。
var client = ConductorClient.builder() .basePath(BASE_PATH) .addHeaderSupplier(new OrkesAuthentication(KEY, SECRET)) .build(); return new TaskClient(client); // Use this TaskClient with TaskRunner to initialize workers
Conductor OSS と Orkes Conductor の 6 つの違いを見つけてください。
私たちは、承認、ワークフローとタスク定義の管理、ワークフローのスケジュール設定などの主要な領域をカバーする改善を加えて、サンプルを専用モジュールに統合し始めました。このモジュールはまだ進行中ですが、より良いガイダンスを提供し、実際の使用例をカバーするために、サンプルを継続的に追加および改良していきます。
私たちの目標は、開発者がクライアント/SDK を効果的に使用し、モジュールの進化に合わせてベスト プラクティスを模索できるようにすることです。
Java クライアント v4 の使用を開始する方法は次のとおりです:
Conductor OSS または Orkes Conductor を使用します:
Gradle ベースのプロジェクトの場合:
implementation 'org.conductoross:conductor-client:4.0.0' implementation 'io.orkes:orkes-conductor-client:4.0.0' // required if using Orkes Conductor
Maven ベースのプロジェクトの場合:
<dependency> <groupid>org.conductoross</groupid> <artifactid>conductor-client</artifactid> <version>4.0.0</version> </dependency> <dependency> <groupid>io.orkes</groupid> <artifactid>orkes-conductor-client</artifactid> <version>4.0.0</version> </dependency>
以上が新しい Conductor Java クライアント v4 の発表の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。