2011-07-22 7 views
11

受信者が優先度の低いメッセージより優先度の高いメッセージを消費するようにメッセージの優先度を設定する必要があります。JMSメッセージの優先度がメッセージに作用しない

最初に私はmessage.setJMSPriority()メソッドで優先度を設定しようとしましたが、HornetQとActiveMQでは機能しませんでしたので、setPriority()メソッドを使用してメッセージプロデューサの優先度を設定しました。

JMSベンダーの実装でMesssge.setJMSPriority()が動作しないのはなぜですか、メッセージの優先度を設定するためにメッセージ自体ではなくプロデューサの優先度を設定する必要があるのはなぜですか?次に、Messsge.setJMSPriority()メソッドの使用は何ですか?

ご意見やご感想はありがとうございます。

答えて

16

この質問に答えるには、setJMSPriorityメソッドのAPIドキュメントを読んで、その理由を説明します。関連するテキストは次のとおりです。

このメッセージの優先度を設定します。

JMSプロバイダは、メッセージの送信時にこのフィールドを設定します。このメソッドは、受信したメッセージの値を変更するために使用できます。

JMSプロバイダ(ActiveMQの、HornetMQ、など)ので、前に値を設定し、4、またはあなたが使用するプロデューサーを設定したどのような値へのデフォルト値のいずれかへの送信のプロデューサーに優先順位を設定メッセージ自体を送信しても効果はありません。

5

これはJMS仕様の要件です。

メッセージプロデューサの優先度を変更する必要があります。

8
msg.setJMSPriority(9); 

このコードでは、メッセージの優先度は9に設定されています。これは、優先度の高いメッセージであることを示しています。 ただし、メッセージを送信すると、メッセージの優先度は4(通常 優先)になります。理由?メッセージの有効期限と同様に、JMSプロバイダはメッセージの メッセージ優先度プロパティを調べ、メッセージをキューに入れる前にsetJMSPriorityメソッドを より先に呼び出します。デフォルトのメッセージ優先度は4(通常 優先度)なので、開発者が元々意図していたとおり、メッセージ優先度は優先度の高いメッセージに設定されません。メッセージの有効期限と同様

は、メッセージの優先順位を設定する2つの方法があります:あなたは のMessageProducer(QueueSenderのか、トピック 出版社)にsetPriorityを()メソッドを呼び出したり、メッセージを送信するときにメッセージの優先度を設定することができます。

//set the default message priority for all messages to 9 (high) 
QueueSender qSender = qSession.createSender(requestQ); 
qSender.setPriority(9); 

qSender.send(msg1); 
//this message is low priority 
qSender.send(msg2, DeliveryMode.PERSISTENT, 1, 30000); 

この例では、msg1は優先度9(優先度)で送信され、msg2は が優先度1(優先度が低い)で送信されます。

関連する問題