---
schema_version: "1"
id: 1651e733bac8d63cbca1541bde34ac9ce3c01eafef3bc560e5d1e48299b668d3
title: メッセージ肯定応答の処理
collection: mulesoft
version: current
locale: ja-jp
portal_url: https://docs.salesforce.com/mulesoft/current/ja-jp/ibm-mq-connector/1.7/ibm-mq-ack.md
canonical_url: https://docs.mulesoft.com/jp/ibm-mq-connector/1.7/ibm-mq-ack
source_site: docs.mulesoft.com
content_type: documentation
content_hash: 324b83fb54af5ff079be5f81612eadd70181b3a176f249bc838aa89ec3f57f92
description: MuleSoft Documentation Site
release: "1.7"
latest: true
---
# メッセージ肯定応答の処理

JMS Connector には、いくつかの異なる肯定応答設定があります。

## [](#成功時の自動肯定応答)成功時の自動肯定応答

`AUTO ackMode`​ を ​`ibm-mq:listener`​ コンポーネントで使用することにより、フローの実行が正常に完了した場合に​**限って**​、受信したメッセージが自動的に肯定応答されます。 フロー実行中にエラーが発生して早期に終了した場合、メッセージは肯定応答されず、再配信が行われます。

`AUTO`​ と似たもう一つの ​`ackMode`​ に ​`DUPS_OK`​ があります。​`DUPS_OK`​ を使用すると、フロー実行が正常に完了した時点で自動的にメッセージが肯定応答されますが、処理がゆっくり行われるため、肯定応答を待たずにメッセージが再配信されてしまい、重複が発生する可能性があります。

## [](#即時の肯定応答)即時の肯定応答

`ibm-mq:listener`​ または ​`ibm-mq:consume`​ のいずれかの操作で ​`ackMode`​ を ​`IMMEDIATE`​ に設定すると、メッセージがコンシュームされたらすぐに、アプリケーションによってメッセージの処理が行われる前に自動的に肯定応答されます。 メッセージの受信後に自動的に肯定応答すると、メッセージの処理中にエラーが発生してもメッセージが再配信されないため、デッドレターキューのようなアプリケーションロジックを作成して、メッセージを失わずにエラーを処理する必要があります。

## [](#手動肯定応答)手動肯定応答

ご推察の通り、​`MANUAL` ​`ackMode`​ は、メッセージの肯定応答の責任をすべてアプリケーションロジックに委ねます。

この設定を使用すると、​`listener`​ または ​`consume`​ のいずれかの操作で受信したすべてのメッセージでは Mule メッセージ ​`attributes`​ に ​`ackId`​ が含まれています。メッセージはそれによって特定の接続で一意に識別されます。

メッセージを識別する ​`ackId`​ は ​`ibm-mq:ack`​ 操作に渡されます。

```xml
<flow name="consumerWithManualAck">
    <ibm-mq:consume config-ref="JMS_config" destination="openTickets" ackMode="MANUAL"/>

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

    <ibm-mq:ack ackId="#[attributes.ackId]"/>
</flow>
```

### [](#手動セッションリカバリー)手動セッションリカバリー

`MANUAL ackMode`​ を使用した場合、ブローカーは、受信されていても肯定応答されていないすべてのメッセージを再配信しません。 メッセージの処理中にエラーが発生して肯定応答ができない場合は、ユーザーが ​`recover-session`​ 操作を使用して、再配信する必要のあるセッション中のすべてのメッセージを手動でリカバリーする責任を負います。

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

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

    <ibm-mq:ack ackId="#[vars.consumedMessage.attributes.ackId]"/>

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

以前と同じように、セッションのリカバリーに使用する接続は、メッセージを受信したときに使用した接続と同じでなければなりません。

## [](#関連情報)関連情報

- [トピックサブスクリプションの使用](https://docs.mulesoft.com/jp/ibm-mq-connector/1.7/ibm-mq-topic-subscription)
- [新規メッセージのリスン方法](https://docs.mulesoft.com/jp/ibm-mq-connector/1.7/ibm-mq-listener)