2017-12-27 11 views
-1

Ich möchte jederzeit eine nachricht senden 't', die durch den empfänger nach 'x' sek.verzögerung lieferung der nachricht in activeMQ im frühjahr boot

für so tun, ich habe Sendercode

@JmsListener(destination = "topicName") 
    public void reciever(String message) { 
     System.out.println("receiving message " + message + " at " + System.currentTimeMillis()); 
    } 

Aber Nachricht empfangen durch den Empfänger sofort .ohne jede Verzögerung

@Autowired 
private JmsTemplate jmsTemplate; 
private Queue queue = new ActiveMQQueue("topicName"); 

public void show(String message) { 
    try { 
     System.out.println("Sending message " + message); 
     jmsTemplate.convertAndSend(queue, message, new MessagePostProcessor() { 
      @Override 
      public Message postProcessMessage(Message message) throws JMSException { 
       System.out.println("postProcessMessage executed "); 
       message.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, 3 * 60 * 1000); 
       System.out.println("long time " + message 
         .getLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY)); 
       return message; 
      } 
     }); 
     System.out.println("Sending done " + message + " at " + System.currentTimeMillis()); 
    } catch (Exception er) { 
     er.printStackTrace(); 
    } 
} 

und Reciever Code geschrieben.

Ausgang

Senden der Meldung Dies ist eine Nachricht
postProcessMessage lange Zeit 180000
Empfangen Nachricht Dies ist eine Nachricht an 1514391984964
Sending dies getan, ist eine Nachricht an 1514391984970

ausgeführt Konfigurationsdatei ist

@Bean 
    JmsTemplate createJMSTemplate(ConnectionFactory connectionFactory) { 
     JmsTemplate jmsTemplate = new JmsTemplate(); 
     jmsTemplate.setConnectionFactory(connectionFactory); 
     return jmsTemplate; 
    } 

    @Bean 
    ConnectionFactory myActiveMQConnectionFactory() { 
     RedeliveryPolicy redeliveryPolicy = new RedeliveryPolicy(); 
     redeliveryPolicy.setBackOffMultiplier(1); 
     redeliveryPolicy.setUseExponentialBackOff(false); 
     ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616"); 
     connectionFactory.setRedeliveryPolicy(redeliveryPolicy); 
     NetworkConnector networkConnector = new DiscoveryNetworkConnector(); 
     networkConnector.setConsumerTTL(2); 

     return connectionFactory; 
    } 
+0

Haben Sie in den Broker auf Scheduling-Unterstützung aktivieren? –

Antwort

0

Verzögerte Nachricht wird von activemq nicht mit Standardkonfiguration unterstützt, Sie sollten es zuerst einschalten.

Zugabe schedulerSupport in activemq.conf

<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}" schedulerSupport="true">