Flex Gateway新着情報
Governance新着情報
Monitoring API ManagerJMS のトランザクションアクションでは、トランザクションが実行されたときにのみ実行する一連の操作を実行できます。この機能は次の場合に使用します。
トランザクションの一部としてメッセージをパブリッシュする
Publish 操作を使用する場合、アプリケーションは、トランザクションの実行後にメッセージを宛先に送信します。何らかの理由でトランザクションが失敗してロールバックが発生すると、メッセージは送信されません。
トランザクションの一部としてメッセージをコンシュームする
On New Message ソースまたは Consume 操作のいずれかを使用する場合、メッセージはトランザクションの実行後にのみ肯定応答されます。トランザクションがロールバックされると、メッセージは再配信のために宛先に返されます。
JMS 用 Anypoint Connector (JMS Connector) では、[Transactional action (トランザクションアクション)] 項目を設定して操作を実行できます。
メッセージを送信するときに On New Message ソースでトランザクションアクションを使用する場合、[Transactional action (トランザクションアクション)] 項目を ALWAYS_BEGIN
に設定します。この設定により、それぞれの新規メッセージはトランザクションで処理されます。このトランザクションはフローのすべてのコンポーネントに伝播され、フローの実行が正常に完了した後に実行されます。フローの実行でエラーが返された場合、トランザクションはロールバックされます。
デフォルトでは、フローの他のコンポーネントは On New Message によって作成されたトランザクションに参加しません。ソーストランザクションを使用して他の操作を実行するには、該当のコンポーネントで [Transactional action (トランザクションアクション)] 項目を ALWAYS_JOIN
または JOIN_IF_POSSIBLE
に設定します。
次の例では、新規メッセージのトランザクションアクションを設定します。
Studio で、フローから [On New Message] ソースを選択します。
[Destination (宛先)] 項目を ${originQueue}
に設定します。
[Advanced (詳細)] タブで [Transactional action (トランザクションアクション)] 項目を ALWAYS_BEGIN
に設定します。
XML エディターでは、<jms:listener>
および transactionalAction
の設定は次のように記述されます。
<jms:listener config-ref="JMS_Config" destination="${originQueue}" transactionalAction="ALWAYS_BEGIN"/>
Publish や Consume などの操作をトランザクションの一部として実行するには、[Transactional action (トランザクションアクション)] 項目を ALWAYS_JOIN
または JOIN_IF_POSSIBLE
に設定します。
次の例では、On New Message ソースにより開始されたトランザクションに参加する Publish および Consume 操作を設定します。
[Mule Palette (Mule パレット)] ビューで、[JMS] > [On New Message] を選択します。
[On New Message] を Studio キャンバスにドラッグします。
[On New Message] 設定画面で、[Destination (宛先)] 項目を ${originQueue}
に設定します。
[Advanced (詳細)] タブで [Transactional action (トランザクションアクション)] 項目を ALWAYS_BEGIN
に設定します。
[Publish] 操作を [On New Message] ソースの右にドラッグします。
[Destination (宛先)] 項目を #[attributes.properties.userProperties.redirectDestination]
に設定します。
[Advanced (詳細)] タブで [Transactional action (トランザクションアクション)] 項目を JOIN_IF_POSSIBLE
に設定します。
[Consume] 操作を [Publish] 操作の右にドラッグします。
[Destination (宛先)] 項目を #[attributes.properties.userProperties.callbackDestination]
に設定します。
[Advanced (詳細)] タブで [Transactional action (トランザクションアクション)] 項目を JOIN_IF_POSSIBLE
に設定します。
XML エディターでは、transactionalAction
設定は次のように記述されます。
<flow name="joiningToListenerTransaction">
<jms:listener config-ref="JMS_Config" destination="${originQueue}" transactionalAction="ALWAYS_BEGIN"/>
<jms:publish config-ref="JMS_Config" destination="#[attributes.properties.userProperties.redirectDestination]" transactionalAction="JOIN_IF_POSSIBLE"/>
<jms:consume config-ref="JMS_Config" destination="#[attributes.properties.userProperties.callbackDestination]" transactionalAction="JOIN_IF_POSSIBLE"/>
</flow>
次の例では、Try スコープコンポーネント、JMS の Publish 操作と Publish consume 操作、Validation Module の Is true 操作を使用して、スコープ設定されたトランザクションを設定します。
[Mule Palette (Mule パレット)] ビューで、[HTTP] > [Listener] を選択します。
[Listener] を Studio キャンバスにドラッグします。
[Listener] 設定画面で、[Path (パス)] 項目を /orders
に設定します。
[Try] スコープコンポーネントを [Listener] ソースの右にドラッグします。
[Transactional action (トランザクションアクション)] 項目を ALWAYS_BEGIN
に設定します。
JMS の [Publish] 操作を [Try] スコープコンポーネントにドラッグします。
[Destination (宛先)] 項目を ${billingService}
に設定し、[Transactional action (トランザクションアクション)] 項目を ALWAYS_JOIN
に設定します。
JMS の [Publish] 操作を最初の [Publish] 操作の右にドラッグします。
[Destination (宛先)] 項目を ${shipmentService}
に設定し、[Transactional action (トランザクションアクション)] 項目を ALWAYS_JOIN
に設定します。
[Publish consume] 操作を 2 番目の [Publish] 操作の右にドラッグします。
[Destination (宛先)] 項目を ${invoicesVerificationService}
に設定します。
Validation Module の [Is true] 操作を [Publish consume] 操作の右にドラッグします。
[Expression (式)] メニューで [Expression (式)] を選択し、値を #[payload]
に設定します。
XML エディターでは、transactionalAction
の設定は次のように記述されます。
<flow name="nonTxPublishMustNotJoinCurrentTx">
<http:listener config-ref="HTTP_Config" path="/orders"/>
<try transactionalAction="ALWAYS_BEGIN">
<jms:publish config-ref="config" destination="${billingService}" transactionalAction="ALWAYS_JOIN"/>
<jms:publish config-ref="config" destination="${shipmentService}" transactionalAction="ALWAYS_JOIN"/>
<jms:publish-consume config-ref="JMS_Config" destination="${invoicesVerificationService}"/>
<validation:is-true expression="#[payload]"/>
</try>
</flow>