2017-10-30 2 views
-1

このコードでは、パブリッシャ側からのキューに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(); 
      } 
     } 

答えて

0

あなたはTTLを受け入れるか、すべての送信されたメッセージに同じTTLを追加プロデューサーににsetTimeToLiveを呼び出すことにより、sendメソッドを経由してあなたのためにそれを行うにはJMSのMessageProducerを構成することによって、これを行います。メッセージバージョンのJMS APIは、メッセージでセッターを呼び出すことは効果がないことは明らかです。

ボイドsetJMSExpiration(長い有効期限)JMSExceptionを

は、メッセージの有効期限の値を設定しますスローされます。

このメソッドは、JMSプロバイダがメッセージの送信時にのみこのフィールドを設定するために使用します。このメッセージは、クライアントがメッセージの有効期限を設定するために使用することはできません。実装が独自のものではないメッセージを送信するときにJMSプロバイダがこのフィールドを設定できるようにするには、このメソッドはpublicです。

+0

私が「無効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} –

+1

答えとJMS APIを読んでください。 setJMSExpirationを呼び出すことはできず、何かが起こることを期待することはできません。ただ機能しません。 –

+0

コードで説明してください。 –

関連する問題