VM コネクタ

VM コネクタは、一時的または永続的な非同期キューを介してアプリケーション内およびアプリケーション間で通信を行うためのものです。

  • 一時的なキューは永続的なキューより高速ですが、システムがクラッシュした場合は信頼できません。

  • 永続的なキューは速度は劣りますが、信頼できます。

単一インスタンスで実行すると、永続的なキューはコンテンツをシリアル化してディスクに保存します。

クラスタモードで実行すると、永続的なキューはメモリグリッドによってバッキングされます。つまり、フローが VM コネクタを使用してコンテンツをキューにパブリッシュする場合、そのメッセージを同じ発生元ノードで処理するのか、別のノードによって取得されるようクラスタに送信するのかは、Mule Runtime によって判断されます。したがって、VM モジュールを使用するとクラスタ全体に負荷を分散しやすくなります。

どちらの方法でも、トランザクションは常にサポートされます。

どのような場合に VM コネクタを使用するのか

VM コネクタは次の場合に使用します。

  • 直接 <flow-ref /> を使用する代わりに、キューメカニズムを使用してフロー間でメッセージを渡す場合。

  • クラスタ全体で作業を分散する場合。

  • 同じ Mule ドメインで実行中の異なるアプリケーションと通信する場合。

  • 完全な JMS ブローカーの使用が正当化されない単純なキューが必要な場合。

キューの定義

VM の config は、コネクタが操作するキューを定義します。設定は、それぞれ独自の queues セットを指定して、何個でも定義することができます。次に例を示します。

<vm:config name="vm">
    <vm:queues>
        <vm:queue queueName="transientQueue" queueType="TRANSIENT" />
        <vm:queue queueName="persistentQueue" queueType="PERSISTENT" />
    </vm:queues>
</vm:config>

特定の config 内で定義された各 queue は、その特定の config を参照する操作のみが使用できることに留意してください。キュー名 (queueName) を複数の config で繰り返すことはできません。また、同じ名前のキューが同じアプリケーションまたはドメイン内に複数存在することもできません。

永続的なキューの制限

永続的なキューを使用する場合、メッセージはディスクに書き込まれるか、クラスタ全体に分散されるかのいずれかです。この場合はメッセージをネットワーク経由で送信する必要があります。どちらの場合でも、メッセージはシリアル化される必要があります。つまり、送信するコンテンツをシリアル化する必要があるということです。Kryo シリアル化を有効にして、より広範なシリアル化可能な値を取得できますが、Kryo にはいくつかの制限があります。そのため、永続的なキューを使用する場合は、次の点に留意してください。

  • 値は単純なものにする。構造が複雑すぎると、シリアル化しにくい場合に、シリアル化エラーやパフォーマンス上の問題が発生する可能性があります。

  • 複雑な Java オブジェクトを使用する場合、Serializable インターフェースが実装され、Java Bean コントラクトに準拠していることを確認する。

  • ストリーム、JSON オブジェクト、マップなどは、通常、関連する値が上記の推奨事項に準拠している限りは問題がない。

Was this article helpful?

💙 Thanks for your feedback!

Edit on GitHub