このコードでは、パブリッシャ側からのキューに1秒の有効期限切れのメッセージに対してsetJMSExpiration(1000)を使用しています。しかし、Consumer Sideからは、nullではなく1秒後に適切にメッセージが返されます。JavaプログラミングによるActiveMQを使用してキューメッセージの有効期限を設定する方法を教えてください。
public class RegistrationPublisher extends Thread{
public void run() {
publisherQueue("Registration.Main.*");
}
public void publisherQueue(String server){
try {
String url="tcp://192.168.20.49:61616";
// Create a ConnectionFactory
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue(server);
MessageProducer producer = session.createProducer(destination);
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
String text = "Test";
TextMessage message = session.createTextMessage(text);
message.setJMSExpiration(1000);// For Expire message in one second
producer.send(message);
producer.close();
session.close();
connection.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String args[]) throws IOException{
RegistrationPublisher registrationPublisher=new RegistrationPublisher();
registrationPublisher.start();
}
}
私が「無効setJMSExpiration(長い有効期限)がJMSExceptionをを投げる」使用はorg.apache.activemq.command.Messageを拡張し、javax.jsm.Messageを実装していますが、有効期限が切れたメッセージのために働いていません。私は方法は、以下れる使用: ます。public void setJMSExpiration(ロングarg0には)たJMSExceptionをスロー{ \t \t // TODOメソッドスタブを自動生成 \t \t this.setExpiration(arg0に); // TTLはここで働いていないとsetExpiration(arg0の)も動作していない \t} –
答えとJMS APIを読んでください。 setJMSExpirationを呼び出すことはできず、何かが起こることを期待することはできません。ただ機能しません。 –
コードで説明してください。 –