Ich versuche, verzögerte Exchange-Plugin zu verwenden, aber irgendwie funktioniert es nicht für mich und Nachricht werden ohne Verzögerung erhalten.RabbitMQ verzögerte Nachricht funktioniert nicht
habe ich versucht, folgende Dinge:
a) aktiviert rabbitmq_delayed_message_exchange erfolgreich und neu gestartet rabbitmq Server auf Ubuntu-16.04.
b) Deklarieren Austausch
Map<String,Object> props = new HashMap<String,Object>();
props.put("x-delayed-type", "direct");
this.automationExchange = new DirectExchange(exchangeName,true,false, props);
c) Schieben Nachricht als
DefaultClassMapper typeMapper = QueueUtils.classMapper;
typeMapper.setDefaultType(type);
Jackson2JsonMessageConverter converter = QueueUtils.converter;
converter.setClassMapper(typeMapper);
RabbitTemplate template = AMQPRabbitMQTemplate.getAMQPTemplate();
template.setMessageConverter(converter);
template.convertAndSend(routingKey, message, new MessagePostProcessor() {
@Override
public Message postProcessMessage(Message m) throws AmqpException {
m.getMessageProperties().setDelay(delayMiliSeconds);
m.getMessageProperties().setDeliveryMode(MessageDeliveryMode.PERSISTENT);
return m;
}
});
Jetzt, wenn ich Nachricht am Drucken
public void onMessage(Message message, Channel channel) throws Exception{
System.out.println(message.getMessageProperties().getDelay());
channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
}
Es wird Druck null für getDelay, die im Idealfall sollte negativ sein von dem eingestellten Wert gemäß https://www.rabbitmq.com/blog/2015/04/16/scheduling-messages-with-rabbitmq.
Bitte lassen Sie mich wissen, wenn ich etwas falsch mache. Ich benutze Version 1.6.8.RELEASE für spring-amqp und spring-rabbit.
Dank Gary funktionierte es nach der Einstellung setDelayed (true). –