Добавьте метод по умолчанию перед вызовом onMessage, если MessageListener Spring Amqp

Мне нужно добавить некоторые функции по умолчанию, которые будут выбирать какое-то значение из заголовка сообщения в Spring Amqp перед вызовом функции onMessage реализующего класса.

Eg

class TestListener implements MessageListerner {

public void onMessage(Message message){
// some logic 
   }
}

В приведенном выше примере мне нужно вызвать некоторые настраиваемые функции с использованием объекта Message до вызова onMessage.

Есть ли элегантный способ добиться того же в SpringAmqp?


person Akshat    schedule 04.04.2016    source источник
comment
Я не понимаю вопроса или, может быть, причины... Если вы хотите изменить сообщение до его получения, сделайте это перед отправкой. Или, может быть, вы просто хотите использовать что-то вроде обмена заголовками?   -  person cantSleepNow    schedule 04.04.2016
comment
Требование состоит в том, чтобы выполнить любую бизнес-операцию на стороне прослушивателя до того, как Message получит onMessage. Например. Со стороны производителя установите значение в заголовке сообщения, скажем, имя потока = t1, на стороне прослушивателя я извлеку это значение и выполню любую общую операцию с этим t1 для другого сообщения, значение имени потока может быть t2 и т. д.   -  person Akshat    schedule 04.04.2016
comment
Но onMessage вызывается только при получении сообщения (или я что-то упускаю)?   -  person cantSleepNow    schedule 04.04.2016


Ответы (1)


Вы можете просто создать простой класс-оболочку вокруг своего слушателя.

public void onMessage(Message message) {
    // process
    myListener.onMessage(message)
}

Или контейнер прослушивателя имеет свойство afterReceivePostProcessors именно по этой причине...

/**
 * Set {@link MessagePostProcessor}s that will be applied after message reception, before
 * invoking the {@link MessageListener}. Often used to decompress data.  Processors are invoked in order,
 * depending on {@code PriorityOrder}, {@code Order} and finally unordered.
 * @param afterReceivePostProcessors the post processor.
 * @since 1.4.2
 */
public void setAfterReceivePostProcessors(MessagePostProcessor... afterReceivePostProcessors) { ... }
person Gary Russell    schedule 04.04.2016