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을 받아 송신 방법을 통해 당신을 위해 그것을하기 위해 JMS 메시지 생성자를 구성하거나 모든 보낸 메시지에 동일한 TTL을 추가 생산에에 setTimeToLive를 호출하여이 작업을 수행. 메시지 버전의 JMS API는 메시지에서 setter를 호출해도 아무런 효과가 없다는 것을 분명히 알 수 있습니다.

무효 setJMSExpiration (긴 만료) JMS 프로 바이더

메시지의 만료 값을 설정 발생합니다.

이 메서드는 메시지를 보낼 때만이 필드를 설정하기 위해 JMS 공급자가 사용합니다. 이 메시지는 클라이언트가 메시지 만료 시간을 구성하는 데 사용할 수 없습니다. 이 메소드는 공개되어있어, 구현자가 독자적인 것이 아닌 메세지를 송신 할 때 JMS 프로 바이더가이 필드를 설정할 수 있습니다.

+0

"void setJMSExpiration (long expiration) throws JMSException"with org.apache.activemq.command.Message를 사용하고 javax.jsm.Message를 구현했지만 만료 메시지가 작동하지 않습니다. 내가 방법을 따르고 사용 : 공공 무효 setJMSExpiration (긴 것들은 arg0가) JMS 프로 바이더를 던졌습니다 { \t \t // TODO 방법 스텁을 자동 생성 \t \t this.setExpiration (는 arg0); // TTL 여기에 작동하지 않으며 setExpiration (arg0에서)도 작동하지 않습니다. \t} –

+1

대답과 JMS API를 읽으십시오. setJMSExpiration을 호출 할 수 없으며 아무 일도 일어나지 않을 것입니다. 그냥 작동하지 않습니다. –

+0

코드로 설명하십시오. –

관련 문제