1

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.

Antwort

0

Um eine unerwartete Verbreitung von Headern von einer eingehenden Nachricht zu einer ausgehenden Nachricht zu vermeiden, werden bestimmte Header für eingehende Nachrichten von MessageProperties.getReceived... Methoden bereitgestellt.

In diesem Fall befindet sich die Kopfzeile in MessageProperties.getReceivedDelay().

Sie müssen auch setDelayed(true) auf automationExchange, bevor Sie es mit dem Admin deklarieren.

Ich vermute, Sie haben den Austausch als Standard in der RabbitTemplate auch gesetzt.

+0

Dank Gary funktionierte es nach der Einstellung setDelayed (true). –

Verwandte Themen