spring amqp RP C копирует заголовки из запроса в ответ - PullRequest
1 голос
/ 10 февраля 2020

Я ищу способ скопировать некоторые заголовки из сообщения запроса в ответное сообщение, когда я использую 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();
    }

1 Ответ

0 голосов
/ 10 февраля 2020

По этой причине была добавлена ​​поддержка типа возврата Message<?>, но мы могли бы добавить точку расширения, чтобы разрешить это, пожалуйста, откройте GitHub проблему .

Вклад приветствуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...