Upgrade to Pro — share decks privately, control downloads, hide ads and more …

非同期ツールキット「Vert.x」のご紹介

 非同期ツールキット「Vert.x」のご紹介

JavaDoでしょう#23 Java21リリース記念イベント@札幌 で使用したLT資料です。
Vert.xの「非同期」以外のおすすめポイントを紹介します!

Masatoshi Itoh

November 18, 2023
Tweet

More Decks by Masatoshi Itoh

Other Decks in Programming

Transcript

  1. 非同期ツールキット
    「Vert.x」のご紹介
    2023/11/18
    JavaDoでしょう#23 Java21リリース記念イベント@札幌
    @masatoshiitoh (twitter/X)

    View full-size slide

  2. 自己紹介
     いとうまさとし(Twitter: @masatoshiitoh)
     株式会社セガ札幌スタジオ
     今回の発表はセガサミーグループの技術スタックや開発・運
    営中のタイトルとは全く関係ありません
     過去作品
     Speed.rbbtoday.com(IRI-CT、現イード在籍当時に開発)
     最近のGist
     Camel から Camel Vert.x component 経由でVert.xクラス
    タのイベントバスを読み書きする
     とにかくApache Camelを動かしてみるための最初の手順

    View full-size slide

  3. 今回は
     Vert.xが楽しい、というお話をします

    View full-size slide

  4. 今回は
     Vert.xが楽しい、というお話をします
     非同期の話はしません(え
     今回の発表はセガサミーグループの技術スタックや開発・運
    営中のタイトルとは全く関係ありません

    View full-size slide

  5. Vert.x
    について
    1. Vert.x は、 Eclipse Foundation のプロジェクトのひとつ
    2. JVM (Java Virtual Machine) で動作します
    3. 非同期プログラミングをサポートするツールキットです

    View full-size slide

  6. Vert.x
    について
    非同期アプリケーションの何がうれしいか?
    1. OSスレッドを節約できる
    2. CPUリソースを比較的有効に使える
    … このあたりはグリーンスレッドで解消!(しょんぼり

    View full-size slide

  7. PROS
    v.s.
    CONS
    Pros
    1. アプリケーション内のサブプロセス的に使えるVerticleが便利
    2. イベントバス経由のメッセージ交換が便利
    3. アプリケーションレベルのクラスタが組みやすい
    Cons
    1. Spring Boot+グリーンスレッドが、ほとんどのケースで楽

    View full-size slide

  8. Verticleとは
     Vert.xアプリケーションの内部で動作する、アクターモデル
    のように利用できるクラスです
     AbstractVerticleを継承します
     Verticle用途例
     ひとかたまりの機能を担当(例:ウェブサーバー機能)
     イベントバスとだけやりとりして動作するアクター
     “Character.player.123456”
     “Character.npc.shop01”

    View full-size slide

  9. Verticleとは
    定義:
    public class QueryApiVerticle extends AbstractVerticle
    {
    @Override
    public void start() throws Exception {
    vertx.eventBus().consumer("query", message -> {
    System.out.println(“MSG:" + message.body());
    message.reply("Query received!");
    });
    }
    起動:
    vertx.deployVerticle(new QueryApiVerticle());

    View full-size slide

  10. イベントバス
    とは
     Vert.x上で使用できるメッセージング機構です
     データの送受信モデルとして、どちらも使用可能です
     Publish – Consume
     Publish – Subscribe
     送受信のキーは文字列で指定可能です

    View full-size slide

  11. イベントバス
    とは
    送信側:
    vertx.eventBus().request("query", params, reply -> {
    if (reply.succeeded()) {
    routingContext.response()
    .putHeader("content-type", "text/plain")
    .end((String) reply.result().body());
    } else {
    routingContext.response()
    .putHeader("content-type", "text/plain")
    .end("Failed to send query!");
    }
    });
    受信側:
    vertx.eventBus().consumer("query", message -> {
    System.out.println(“MSG:" + message.body());
    message.reply("Query received!");
    });

    View full-size slide

  12. クラスタを
    組む、とは
     Vert.xは、Vert.x同士のクラスタを構築してHA環境を実現
    できます
     HazelcastやZookeeper、Apache Igniteなどを使ってクラ
    スタマネージャを実現しています
     クラスタ内はイベントバスを使ってメッセージングできるほ
    か、Key-Valueストア、ロック、カウンターがクラスタマ
    ネージャによって提供されます

    View full-size slide

  13. クラスタを
    組む、とは
    クラスタマネージャーの追加(pom.xml):

    io.vertx
    vertx-hazelcast
    4.4.0

    クラスタを有効にする(pom.xml):

    exec-maven-plugin


    io.vertx.core.Launcher

    run
    ${main.verticle}
    -cluster

    View full-size slide

  14. クラスタを
    組む、とは
     Hazelcast クラスタマネージャであれば、同じサブネット上
    で起動すれば自動でつながる
     外部連携、たとえばCamelのVert.xコンポーネントも、クラ
    スタ経由で接続するみたい(調査資料↓)
    Camel から Camel Vert.x component 経由でVert.xクラ
    スタのイベントバスを読み書きする (github.com)
    https://gist.github.com/masatoshiitoh/9aeb0e00a3e177f080cff4a0130a576b

    View full-size slide

  15. というわけで  Vert.xって楽しそうかも? と思っていただけたら幸いです

    View full-size slide

  16. ご清聴
    ありがとう
    ございました
    (セガ札幌スタジオ、中途採用絶賛おこなってます)

    View full-size slide