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;
}
Haben Sie in den Broker auf Scheduling-Unterstützung aktivieren? –