次に示す問題は、クラスタ化したブローカに影響します。
このリリースでは、フル接続のブローカクラスタのみサポートされています。つまり、クラスタ内のすべてのブローカは、そのクラスタ内のほかのブローカと相互に直接やり取りする必要があります。imqbrokerd -cluster コマンド行引数を使用してブローカを接続する場合は、そのクラスタ内のすべてのブローカが含まれていることを確認してください。
HADB を使用するブローカは、10M バイトより大きなメッセージを処理できません。(バグ 6531734)
クライアントが高可用性ブローカに接続されている場合、クライアントランタイムは、imqAddressListIterations 値が何に設定されているかに関係なく、成功するまで再接続を試みます。
クラスタの一部であるブローカに接続されているクライアントは、現在 QueueBrowser を使用して該当するクラスタ内のリモートブローカにあるキューを検索することはできません。クライアントが検索できるのは、直接接続されているブローカにあるキューの内容のみです。この場合でも、クライアントは、クラスタ内の任意のブローカに対してキューにメッセージを送信したりキューからのメッセージを消費したりできます。制約を受けるのは検索のみです。
従来のクラスタでは、4.1 ブローカを 3.x ブローカと一緒にクラスタ化する場合は、プロパティー imq.autocreate.queue.maxNumActiveConsumers=1 を 4.1 ブローカ用に設定する必要があります。そうしないと、ブローカはクラスタ接続を確立できません。
高可用性クラスタに変換するときに、Message Queue Manager ユーティリティー (imqdbmgr) を使用して、既存のスタンドアロン HADB 持続データストアを共有 HADB ストアに変換できます。コマンドは次のとおりです。
imqdbmgr upgrade hastore
このユーティリティーは次の場合に使用できます。
4.0 スタンドアロン HADB ストアから 4.1 共有 HADB ストアに移行する。この場合、ブローカは自動的にストアをアップグレードします。次に、imqdbmgr コマンドを実行して、アップグレードしたデータストアを共有で使用するために変換できます。
スタンドアロン 4.1 HADB ストアから共有 HADB ストアに移行する。この場合は、上記の imqdbmgr コマンドを実行して、データストアを共有で使用するために変換する必要があるだけです。
このコマンドは HADB ストアの変換をサポートするだけなので、このコマンドを使用してファイルベースのストアまたはほかの JDBC ストアを共有 HADB ストアに変換することはできません。以前に 3.x バージョンの Message Queue を実行していた場合は、高可用性機能を使用するためには、HADB ストアを作成してから、データを手動でそのストアに移行する必要があります。
コマンド imqdbmgr upgrade hastore を使用した HADB ストアへの変換は、ストアに 10,000 を超えるメッセージが保持されている場合、「設定されているロックの数が多すぎます」というメッセージが表示されて失敗することがあります。(バグ ID 6588856))。
(回避策:) 次のコマンドを使用して、ロックの数を増やします。
hadbm set NumberOfLocks=<desiredNumber>
詳細は、『Sun Java System Application Server 9.1 Enterprise Edition トラブルシューティングガイド』の「HADB の問題」を参照してください。
1 つのトランザクションに 500 を超えるリモートメッセージがコミットされている場合、ブローカはエラー「HADB-E-12815: Table memory space exhausted」を返すことがあります。 (バグ ID 6550483)
詳細は、『Sun Java System Application Server 9.1 Enterprise Edition トラブルシューティングガイド』の「HADB の問題」を参照してください。
ブローカクラスタで、開始していないリモート接続へのメッセージをブローカがキューに入れます (バグ ID 4951010)。
回避策: いったんその接続が開始すると、メッセージはコンシューマによって受信されます。コンシューマの接続が閉じている場合、メッセージは別のコンシューマへ再配信されます。
1 つのトランザクションでリモートブローカから複数のメッセージを消費しているときは、次のエラーメッセージがブローカに記録される可能性があります。このメッセージは無視しても問題ありません。
[26/Jul/2007:13:18:27 PDT] WARNING [B2117]: Message acknowledgement failed from mq://129.145.130.95:7677/?instName=a&brokerSessionUID=3209681167602264320: ackStatus = NOT_FOUND(404)\ Reason = Update remote transaction state to COMMITED(6): transaction 3534784765719091968 not found, the transaction may have already been committed. AckType = MSG_CONSUMED MessageBrokerSession = 3209681167602264320 TransactionID = 3534784765719091968 SysMessageID = 8-129.145.130.95(95:fd:93:91:ec:a0)-33220-1185481094690 ConsumerUID = 3534784765719133952\par [26/Jul/2007:13:18:27 PDT] WARNING Notify commit transaction [8-129.145.130.95(95:fd:93:91:ec:a0)-33220-1185481094690, [consumer:3534784765719133952, type=NONE]] TUID=3534784765719091968 got response: com.sun.messaging.jmq.jmsserver.util.BrokerException: Update remote transaction state to COMMITED(6): transaction 3534784765719091968 not found, the transaction may have already been committed.: com.sun.messaging.jmq.jmsserver.util.BrokerException: Update remote transaction state to COMMITED(6): transaction 3534784765719091968 not found, the transaction may have already been committed.r
このメッセージは、imq.txn.reapLimit プロパティーが 1 つのトランザクション内のリモートメッセージの数と比較して少ない場合に、トランザクション内の後のメッセージのためにコミットをメッセージホームブローカに通知するときに記録されます。(バグ 6585449)
回避策: このメッセージを回避するには、imq.txn.reapLimit プロパティーの値を増やします。