Red Hat Training

A Red Hat training course is available for Red Hat JBoss Enterprise Application Platform

18.9. PRE_ACKNOWLEDGE モード

JMS は次の 3 つの承認モードを指定します。
  • AUTO_ACKNOWLEDGE
  • CLIENT_ACKNOWLEDGE
  • DUPS_OK_ACKNOWLEDGE
HornetQ は、PRE_ACKNOWLEDGE と INDIVIDUAL_ACKNOWLEDGE の 2 つの追加モードをサポートします。
シナリオによっては、障害発生時にメッセージを失わせる可能性があるので、クライアントへ配信する前にサーバーでメッセージを確認しやすくなります。
この追加モードは HornetQ によってサポートされ、事前承認モードと呼ばれます。
配信前にサーバーでメッセージを承認する欠点は、サーバーでメッセージを承認した後、クライアントに配信される前にシステムがクラッシュした場合にメッセージが失われることです。この場合、システムの再起動時にメッセージが失われ、復元されません。
メッセージングのケースに応じて、事前承認モードでは、メッセージ損失による対応により、追加のネットワークトラフィックと CPU を回避できます。
事前承認の使用例は、株式価格更新メッセージに関連します。これらのメッセージでは、クラッシュ発生時にメッセージが失われることは適切です。これは、次の価格更新メッセージがすぐに到達し、前の価格を上書きするためです。
注記
pre-acknowledge モードを使用する場合、消費されるメッセージのトランザクションセマンティクスが失われます。これは、トランザクションのコミット時ではなく、サーバーで最初に確認されるためです。

18.9.1. PRE_ACKNOWLEDGE の使用

事前承認モードは、接続ファクトリーの standalone.xml または domain.xml ファイルで設定できます。
<connection-factory name="ConnectionFactory">
   <connectors>
      <connector-ref connector-name="netty-connector"/>
   </connectors>
   <entries>
      <entry name="ConnectionFactory"/>
   </entries>
   <pre-acknowledge>true</pre-acknowledge>
</connection-factory>
または、JMS API を使用して事前承認モードを使用するには、HornetQSession.PRE_ACKNOWLEDGE 定数で JMS セッションを作成します。
// messages will be acknowledge on the server *before* being delivered to the client
Session session = connection.createSession(false, HornetQJMSConstants.PRE_ACKNOWLEDGE);
または、setset メソッドを使用して HornetQConnectionFactory インスタンスに事前承認を直接設定できます。
コア API を使用して事前承認モードを使用するには、セッターメソッドを使用して ClientSessionFactory インスタンスに直接設定できます。