websphere mq v7.1に接続し、JavaおよびJMSを使用して1つ以上の指定されたキューのすべてのメッセージをクリアするための最良のアプローチは何ですか?WebsphereMQ固有のJavaAPIを使用する必要がありますか?ありがとう。
1 に答える
すべての良い質問のように、「それは異なります」。
キューに開いているハンドルがない場合にのみ、コマンドでキューをクリアできます。その場合、キューをクリアするためにPCFコマンドを送信することは非常に効果的ですが、開いているハンドルがある場合はエラーが返されます。PCFコマンドはもちろんJava機能であり、WebSphere MQ独自のものであるため、JMSではありません。
一方、破壊的な実行を許可されたプログラムはキューから外れ、キューをクリアできます。この場合、キューが空であることを示す2033リターンコードを取得するまで、getをループします。これはJMSまたはJavaを使用して実行できますが、どちらも入力バッファーを管理します。キューが本当に深い場合は、すべてのデータを移動することになり、アプリがクライアントに接続されている場合は、メモリ内ではなくネットワーク速度で移動します。
これを回避するには、最小限のバッファーを指定する必要があり、GETオプションの1つとしても指定しますMQGMO.TRUNCATED_MSG_ACCEPTED
。これにより、get呼び出し中にメッセージヘッダーのみが移動し、大幅に高速化できます。
最後に、これをプログラムで実行していて、使用する方法に関係なく、複数のスレッドをスピンオフし、同期点を使用しないでください。実際には、キューで排他的な入力を取得するために邪魔にならないようにする必要があるため、セッションを取得したら、そこから多くのスレッドを生成するだけです。各スレッドを適切に閉じ、すべてのスレッドが閉じたらセッションをシャットダウンします。