2017-01-24 3 views
0

у меня есть случай использования, где я повторно сообщение в очередь с обновленными свойствами, сообщения становятся снова очередь, но свойства сообщений не получают обновленныеснова поставить Весна AMQP сообщение с обновленными свойствами

public class TestListener implements MessageListener{ 


@Override 
public void onMessage(Message arg0) { 

    MessageProperties properties = arg0.getMessageProperties(); 
    int count = properties.getMessageCount(); 
    System.out.println(count); 
    properties.setMessageCount(++count); 
    throw new AmqpException("test"); 
} 

Но Значение count всегда выводит его всегда как 0

ответ

0

Вы не можете этого сделать - протокол amqp не поддерживает отправку данных при отказе от сообщения.

Вы должны переиздать сообщение самостоятельно, например, с помощью вызова RabbitTemplate.send().

Вы также не должны использовать свойство «system» для своих целей; использование messageGetProperties().set("myHeader", count++).

+0

добавление пользовательских свойств в заголовок dosn't help, поскольку мы получаем одно и то же значение. У меня есть случай использования, когда нам необходимо, чтобы REQ сообщение п не раз, основываясь на состоянии некоторого API называют то общественного класса TestListener реализует MessageListener { @Override общественного недействительными OnMessage (arg0 Message) { Byte [] обр = arg0.getBody(); String someValue = new String (arr); // вызывать некоторый вызов API, если не удастся повторить сообщение (эта логика должна быть проверена несколько раз) else переместить вперед – Akshat

+0

Как я уже сказал, вы не можете изменять сообщение, отклоняя его, вы должны его повторно опубликовать. Свойство 'messageCount' является специальным свойством только для чтения. При использовании методов RabbitTemplate.receive() 'это оценка количества сообщений в очереди. Он не заполняется для прослушивателей сообщений. Вам нужно использовать настраиваемый заголовок, и вам нужно переиздать сообщение самостоятельно, вы не можете просто отказаться от него (если вы хотите его изменить). –

Смежные вопросы