JMS Connector を使用したメッセージ肯定応答の設定

JMS 用 Anypoint Connector (JMS Connector) では、​Ack​、​Consume​、​On New Message​、および ​Recovery session​ 操作に応じて異なるメッセージ肯定応答モードを設定できます。

  • 成功時の自動肯定応答

  • 即時肯定応答

  • 手動肯定応答

次の例は、各メッセージ肯定応答モードの設定方法を示しています。

成功時の自動肯定応答モードの設定

成功時の自動肯定応答モードを設定するには、​On New Message​ ソースで ​[Acknowledge Mode (肯定応答モード)]​ 項目を次のいずれかのモードに設定します。

  • AUTO
    フローの実行が正常に完了した場合のみ、受信したメッセージを自動的に肯定応答 (ACK) します。それ以外の場合、メッセージは肯定応答されず、再配信されます。

  • DUPS_OK
    AUTO​ モードと同様に、フローの実行が正常に完了した場合のみ、受信したメッセージを自動的に肯定応答 (ACK) しますが、ACK の実行前にメッセージが再配信されると、メッセージの重複が発生します。

次の例では、​AUTO​ 肯定応答モードを設定します。

  1. Studio で、フローから ​[On New Message]​ ソースを選択します。

  2. [On New Message]​ 設定画面の ​[Destination (宛先)]​ で、メッセージのコンシューム元である宛先の名前 (​#[vars.destination]​ など) を指定します。

  3. [Acknowledge Mode (肯定応答モード)]​ メニューから、​[AUTO]​ を選択します。

On New Message ソースの画面で [Acknowledge Mode (肯定応答モード)] 項目を [AUTO] に設定する
Figure 1. JMS Connector の自動肯定応答モードの設定

XML エディターでは、​<jms:listener>​ および ​ackMode​ の設定は次のように記述されます。

<jms:listener  config-ref="JMS_Config" destination="#[vars.destination]" ackMode="AUTO"/>

即時肯定応答モードの設定

即時肯定応答モードを設定するには、​On New Message​ ソースで ​[Acknowledge Mode (肯定応答モード)]​ 項目を使用するか、​Consume​ 操作で ​[Ack mode (肯定応答モード)]​ 項目を使用します。これらの項目を ​[IMMEDIATE]​ に設定します。このモードでは、メッセージがコンシュームされると、メッセージのアプリケーション処理に進む前にメッセージが自動的に肯定応答 (ACK) されます。
メッセージを自動的に肯定応答すると、メッセージの処理中にエラーが発生してもメッセージが再配信されないため、「デッドレター」キューのようなアプリケーションロジックを使用して、メッセージを失わずにエラーを管理する必要があります。

次の例では、​Consume​ 操作の ​IMMEDIATE​ 肯定応答モードを設定します。

  1. Studio で、フローから ​[Consume]​ 操作を選択します。

  2. [Consume]​ 設定画面の ​[Destination (宛先)]​ で、メッセージのコンシューム元である宛先の名前 (​#[vars.destination]​ など) を指定します。

  3. [Ack Mode (肯定応答モード)]​ メニューから、​[IMMEDIATE]​ を選択します。

Consume 操作の画面で [Ack Mode (肯定応答モード)] 項目を [IMMEDIATE] に設定する
Figure 2. JMS Connector の即時肯定応答モードの設定

XML エディターでは、​<jms:consume>​ および ​ackMode​ の設定は次のように記述されます。

手動肯定応答モードの設定

手動肯定応答モードを設定するには、​On New Message​ ソースで ​[Acknowledge Mode (肯定応答モード)]​ 項目を使用するか、​Consume​ 操作で ​[Ack mode (肯定応答モード)]​ 項目を使用します。これらの項目を ​[MANUAL]​ に設定します。このモードでは、メッセージ肯定応答 (ACK) を実行する責任をすべてアプリケーションロジックに委任します。

On New Message​ または ​Consume​ 操作で受信したすべてのメッセージの Mule メッセージ属性に、特定の接続でメッセージを一意に識別する肯定応答 ID が含まれます。
メッセージを識別する肯定応答 ID は、次に ​Ack​ 操作の ​[Ack id (肯定応答 ID)]​ 項目に渡されます。

次の例では、​Consume​ 操作の ​MANUAL​ 肯定応答モードを設定します。

  1. Studio で、フローから ​[Consume]​ 操作を選択します。

  2. [Consume]​ 設定画面の ​[Destination (宛先)]​ で、メッセージのコンシューム元である宛先の名前 (​openTickets​ など) を指定します。

  3. [Ack Mode (肯定応答モード)]​ メニューから、​[MANUAL]​ を選択します。

  4. [Logger]​ コンポーネントを ​[Consume]​ 操作の右にドラッグします。

  5. [Message (メッセージ)]​ 項目を ​#[payload]​ に設定します。

  6. [Ack]​ 操作を ​[Logger]​ コンポーネントの右にドラッグします。

  7. [Ack id (肯定応答 ID)]​ 項目を、回復するメッセージセッションの肯定応答 ID (​#[attributes.ackId]​ など) に設定します。

Ack 操作の画面で [Ack id (肯定応答 ID)] 項目を、回復するメッセージセッションの肯定応答 ID に設定する
Figure 3. JMS Connector の Ack 操作の設定

XML エディターでは、​<jms:consume>​、​ackMode​、および ​ackId​ の設定は次のように記述されます。

<flow name="consumerWithManualAck">
    <jms:consume config-ref="JMS_config" destination="openTickets" ackMode="MANUAL"/>

    <!--Do message processing-->
    <logger message="#[payload]">

    <jms:ack ackId="#[attributes.ackId]"/>
</flow>

手動セッション回復の設定

手動肯定応答モードを使用すると、受信済みで肯定応答されていないすべてのメッセージはブローカーによって再配信されません。 メッセージ処理中にエラーが発生した場合、​Recover session​ 操作を使用して、セッションで再配信する必要があるすべてのメッセージを手動で回復する必要があります。セッションを回復するために使用する接続は、メッセージを受信するための接続と同じである必要があります。

次の例では、​MANUAL​ 肯定応答モードとセッションの回復方法を設定します。

  1. Studio で、フローから ​[Consume]​ 操作を選択します。

  2. [Consume]​ 設定画面の ​[Destination (宛先)]​ で、メッセージのコンシューム元である宛先の名前 (​${destination}​ など) を指定します。

  3. [Ack mode (肯定応答モード)]​ 項目を ​[MANUAL]​ に設定します。

  4. [Logger]​ コンポーネントを ​[Consume]​ 操作の右にドラッグします。

  5. [Message (メッセージ)]​ 項目を ​#[payload]​ に設定します。

  6. [Ack]​ 操作を ​[Logger]​ コンポーネントの右にドラッグします。

  7. [Ack id (肯定応答 ID)]​ 項目を、回復するメッセージセッションの肯定応答 ID (​#[vars.consumedMessage.attributes.ackId]​ など) に設定します。

  8. フローで小さな矢印をクリックして、​[Error handling (エラー処理)]​ セクションを展開します。

  9. [On Error Propagate]​ コンポーネントを ​[Error handling (エラー処理)]​ セクションにドラッグします。

  10. [Recover session]​ 操作を ​[On Error Propagate]​ コンポーネント内にドラッグします。

  11. [Ack id (肯定応答 ID)]​ 項目を ​#[vars.consumedMessage.attributes.ackId]​ に設定します。

Recover session 操作の画面で [Ack id (肯定応答 ID)] 項目を、回復するメッセージセッションの肯定応答 ID に設定する
Figure 4. JMS Connector の Recover session 操作の設定

XML エディターでは、​<jms:consume>​、​ackMode​、および ​ackId​ の設定は次のように記述されます。

<flow name="consumerWithManualAck">
    <jms:consume config-ref="JMS_config" destination="${destination}"
                 ackMode="MANUAL" target="consumedMessage" targetValue="#[message]"/>

    <!--Do message processing-->
    <logger message="#[payload]">

    <jms:ack ackId="#[vars.consumedMessage.attributes.ackId]"/>

    <error-handler>
        <on-error-propagate>
            <!--In case of error, recover the session-->
            <jms:recover-session ackId="#[vars.consumedMessage.attributes.ackId]"/>
        </on-error-continue>
    </error-handler>
</flow>