第12章 メッセージのグループ化
メッセージグループは、以下の特性を持つメッセージセットです。
-
メッセージグループのメッセージは同じグループ ID を共有します。つまり、グループ識別子プロパティーは同じです。JMS メッセージの場合、プロパティーは
JMSXGroupID
です。 - メッセージグループのメッセージは、キューに多くのコンシューマーがある場合でも、常に同じコンシューマーによって消費されます。元のコンシューマーが閉じられている場合、別のコンシューマーがメッセージグループを受信するように選択されます。
メッセージグループは、プロパティーの特定値のすべてのメッセージを同じコンシューマーで順次に処理したい場合に便利です。たとえば、特定の株式購入の注文を同じコンシューマーで順次処理したい場合があります。これを行うには、コンシューマーのプールを作成し、株式名をメッセージプロパティーの値として設定します。これにより、特定の株式のすべてのメッセージが常に同じコンシューマーによって処理されます。
グループ化されたメッセージは、キューの基礎となる FIFO セマンティクスが原因で、グループ化されていないメッセージの同時処理に影響を及ぼす可能性があります。たとえば、キューの先頭に 100 のグループ化されたメッセージのチャンクがあり、その後に 1,000 個の非グループ化のメッセージが続くと、グループ化されていないメッセージが消費される前に、グループ化されたすべてのメッセージが適切なクライアントに送信されます。このシナリオにおける機能への影響は、グループ化されたすべてのメッセージが処理される間、同時メッセージ処理の一時的な停止です。メッセージグループのサイズを決定する際には、パフォーマンスのボトルネックの可能性を念頭に置いてください。グループ化されたメッセージをグループ以外のメッセージから分離するかどうかを検討してください。
12.1. クライアント側のメッセージのグループ化
以下の例は、Core JMS クライアントを使用してメッセージのグループ化を使用する方法を示しています。
手順
グループ ID を設定します。
JNDI を使用して JMS クライアントの JMS 接続ファクトリーを確立する場合は、
groupID
パラメーターを追加して値を指定します。この接続ファクトリーを使用して送信されたすべてのメッセージでは、JMSXGroupID
プロパティーが指定の値に設定されます。java.naming.factory.initial=org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory connectionFactory.myConnectionFactory=tcp://localhost:61616?groupID=MyGroup
JNDI を使用していない場合は、
setStringProperty()
メソッドを使用してJMSXGroupID
プロパティーを設定 します。Message message = new TextMessage(); message.setStringProperty("JMSXGroupID", "MyGroup"); producer.send(message);
関連情報
メッセージグループの設定および使用方法の作業例は、INSTALL_DIR/examples/features/standard
の mesagge-group
および message-group2
を参照してください。