Flex Gateway新着情報
Governance新着情報
Monitoring API ManagerJMS 用 Anypoint Connector (JMS Connector) では、Ack、Consume、On New Message、および Recovery session 操作に応じて異なるメッセージ肯定応答モードを設定できます。
成功時の自動肯定応答
即時肯定応答
手動肯定応答
次の例は、各メッセージ肯定応答モードの設定方法を示しています。
成功時の自動肯定応答モードを設定するには、On New Message ソースで [Acknowledge Mode (肯定応答モード)] 項目を次のいずれかのモードに設定します。
AUTO
フローの実行が正常に完了した場合のみ、受信したメッセージを自動的に肯定応答 (ACK) します。それ以外の場合、メッセージは肯定応答されず、再配信されます。
DUPS_OK
AUTO モードと同様に、フローの実行が正常に完了した場合のみ、受信したメッセージを自動的に肯定応答 (ACK) しますが、ACK の実行前にメッセージが再配信されると、メッセージの重複が発生します。
次の例では、AUTO 肯定応答モードを設定します。
Studio で、フローから [On New Message] ソースを選択します。
[On New Message] 設定画面の [Destination (宛先)] で、メッセージのコンシューム元である宛先の名前 (#[vars.destination]
など) を指定します。
[Acknowledge Mode (肯定応答モード)] メニューから、[AUTO] を選択します。
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 肯定応答モードを設定します。
Studio で、フローから [Consume] 操作を選択します。
[Consume] 設定画面の [Destination (宛先)] で、メッセージのコンシューム元である宛先の名前 (#[vars.destination]
など) を指定します。
[Ack Mode (肯定応答モード)] メニューから、[IMMEDIATE] を選択します。
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 肯定応答モードを設定します。
Studio で、フローから [Consume] 操作を選択します。
[Consume] 設定画面の [Destination (宛先)] で、メッセージのコンシューム元である宛先の名前 (openTickets
など) を指定します。
[Ack Mode (肯定応答モード)] メニューから、[MANUAL] を選択します。
[Logger] コンポーネントを [Consume] 操作の右にドラッグします。
[Message (メッセージ)] 項目を #[payload]
に設定します。
[Ack] 操作を [Logger] コンポーネントの右にドラッグします。
[Ack id (肯定応答 ID)] 項目を、回復するメッセージセッションの肯定応答 ID (#[attributes.ackId]
など) に設定します。
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 肯定応答モードとセッションの回復方法を設定します。
Studio で、フローから [Consume] 操作を選択します。
[Consume] 設定画面の [Destination (宛先)] で、メッセージのコンシューム元である宛先の名前 (${destination}
など) を指定します。
[Ack mode (肯定応答モード)] 項目を [MANUAL] に設定します。
[Logger] コンポーネントを [Consume] 操作の右にドラッグします。
[Message (メッセージ)] 項目を #[payload]
に設定します。
[Ack] 操作を [Logger] コンポーネントの右にドラッグします。
[Ack id (肯定応答 ID)] 項目を、回復するメッセージセッションの肯定応答 ID (#[vars.consumedMessage.attributes.ackId]
など) に設定します。
フローで小さな矢印をクリックして、[Error handling (エラー処理)] セクションを展開します。
[On Error Propagate] コンポーネントを [Error handling (エラー処理)] セクションにドラッグします。
[Recover session] 操作を [On Error Propagate] コンポーネント内にドラッグします。
[Ack id (肯定応答 ID)] 項目を #[vars.consumedMessage.attributes.ackId]
に設定します。
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>