Я ищу способ скопировать некоторые заголовки из сообщения запроса в ответное сообщение, когда я использую RabbitMq в режиме RP C.
До сих пор я пытался с setBeforeSendReplyPostProcessors
, но я могу только получить доступ к ответу и добавить к нему заголовки. но у меня нет доступа к запросу, чтобы получить нужные мне значения.
Я также пытался использовать цепочку рекомендаций, но returnObject имеет нулевое значение после обработки, поэтому я не могу его изменить (я признаю, что не понимаю, почему он равен null ... Я думал, что смогу получить объект для его изменения):
@Bean
public SimpleRabbitListenerContainerFactory simpleRabbitListenerContainerFactory(SimpleRabbitListenerContainerFactoryConfigurer simpleRabbitListenerContainerFactoryConfigurer, ConnectionFactory connectionFactory) {
SimpleRabbitListenerContainerFactory simpleRabbitListenerContainerFactory = new SimpleRabbitListenerContainerFactory();
simpleRabbitListenerContainerFactory.setAdviceChain(new MethodInterceptor() {
@Override
public Object invoke(MethodInvocation invocation) throws Throwable {
Object returnObject = invocation.proceed();
//returnObject is null here
return returnObject;
}
});
simpleRabbitListenerContainerFactoryConfigurer.configure(simpleRabbitListenerContainerFactory, connectionFactory);
return simpleRabbitListenerContainerFactory;
}
рабочий способ - изменить мой метод, аннотированный @RabbitListener, чтобы он возвращал сообщение и там я могу получить доступ как к запрашивающему сообщению (через аргументы аннотированного метода), так и к ответу.
Но я хотел бы сделать это автоматически, поскольку мне нужна эта функция в разных местах.
В основном я хочу скопировать один заголовок из сообщения запроса в ответ.
этот код выполняет работу, но я хочу сделать это через аспект или перехватчик.
@RabbitListener(queues = "myQueue"
, containerFactory = "simpleRabbitListenerContainerFactory")
public Message<MyResponseObject> execute(MyRequestObject myRequestObject, @Header("HEADER_TO_COPY") String headerToCopy) {
MyResponseObject myResponseObject = compute(myRequestObject);
return MessageBuilder.withPayload(myResponseObject)
.setHeader("HEADER_RESPONSE", headerToCopy)
.build();
}