第27章 事前承認モード
JMS は、次の 3 つの承認モードを指定します。
AUTO_ACKNOWLEDGE
CLIENT_ACKNOWLEDGE
DUPS_OK_ACKNOWLEDGE
ただし、JMS によってサポートされない別のケースがあります。場合によっては、障害発生時にメッセージを失い、メッセージをクライアントに配信する前にサーバーでメッセージを承認することが適切なことがあります。
HornetQ では、この特別なモードは pre-acknowledge モードと呼ばれます。
配信前にサーバーで承認する欠点は、サーバーでメッセージを承認してからメッセージがクライアントに配信されるまでにシステムがクラッシュした場合に、メッセージが失われることです。
メッセージングのケースに応じて、事前承認モードでは、メッセージが失われることがある代わりにネットワークトラフィックと CPU の負荷を回避できます。
事前承認の使用例は、株価更新メッセージです。これらのメッセージでは、クラッシュ時にメッセージを失うことが適切な場合があります。これは、次の株価更新メッセージがすぐに到着し、前の株価を上書きするためです。
注記
事前承認モードを使用する場合は、消費されるメッセージのトランザクションセマンティクスが失われます。これは、メッセージが、トランザクションをコミットしたときではなく、サーバーで最初に承認されるためです。
27.1. PRE_ACKNOWLEDGE の使用
これは、以下のように
JBOSS_DIST/jboss-as/server/PROFILE/deploy/hornetq/hornetq-jms.xml
ファイルの connection factory
で設定できます。
<connection-factory name="NettyConnectionFactory"> <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, HornetQSession.PRE_ACKNOWLEDGE);
または、セッターメソッドを使用して、
HornetQConnectionFactory
インストールで直接事前承認を設定できます。
コア API で事前承認を使用するために、セッターメソッドを使用して
ClientSessionFactory
インスタンスで直接これを設定できます。