1

J'essaie d'utiliser le plugin d'échange retardé, mais en quelque sorte son ne fonctionne pas pour moi et le message sont reçus sans délai.RabbitMQ message retardé ne fonctionne pas

J'ai essayé les choses suivantes:

a) permis rabbitmq_delayed_message_exchange avec succès et redémarré le serveur rabbitmq sur ubuntu-16.04.

b) d'échange Déclarant

Map<String,Object> props = new HashMap<String,Object>(); 

props.put("x-delayed-type", "direct"); 

this.automationExchange = new DirectExchange(exchangeName,true,false, props); 

c) Pousser message comme

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; 
    } 
}); 

Maintenant, quand je suis en train d'imprimer un message

public void onMessage(Message message, Channel channel) throws Exception{ 
    System.out.println(message.getMessageProperties().getDelay()); 
    channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); 
} 

impression est nulle pour getDelay, qui devrait idéalement être négatif de la valeur de consigne selon https://www.rabbitmq.com/blog/2015/04/16/scheduling-messages-with-rabbitmq.

S'il vous plaît laissez-moi savoir si je fais quelque chose de mal. J'utilise la version 1.6.8.RELEASE pour spring-amqp et spring-rabbit.

Répondre

0

Afin d'éviter la propagation inattendue d'en-têtes d'un message entrant vers un message sortant, certains en-têtes pour les messages entrants sont fournis par les méthodes MessageProperties.getReceived....

Dans ce cas, l'en-tête est MessageProperties.getReceivedDelay(). Vous devez également setDelayed(true) sur automationExchange avant de le déclarer avec l'administrateur

Je présume que vous avez également défini l'échange comme RabbitTemplate par défaut.

+0

Merci Gary cela a fonctionné après avoir réglé setDelayed (true). –