2015-07-28 3 views
3

У меня были две проблемы, я не мог узнать, какие аннотации для использования к получают те же эффекты, gateway ", найденный в документации. Когда я решил эту проблему, я не мог понять, почему мой шлюз никогда не отвечал!Весной интеграция, как настроить шлюз сообщений только с аннотациями java, и убедитесь, что шлюз видит ответ

Итак, я понял, что оба они и подумали, что я поделюсь.

ответ

4

Вот как я определил мой класс шлюза:

@MessagingGateway(defaultRequestChannel = "inChan", defaultReplyChannel = "outChan")  
public interface CalAmpSIRouteAndProcessService { 

    @Gateway(requestChannel = "inChan", replyChannel = "outChan") 
    Future<CalAmpSIWrapper> processMessage(Object message, @Header("headerKey") String neededHeader); 
} 

Это дает вам асинхронный метод обслуживания (ProcessMessage), класс объекта в сообщении может быть любой класс, который вы хотели за эту услугу. @Header предоставляет вашему сервисному методу возможность добавить значение заголовка (с ключом «headerKey» и значением requiredHeader) к сообщению, полученному вызовом processMessage.

Чтобы получить этот компонент признал, что мне нужна следующие аннотации в моем классе MyConfig.java:

@Configuration 
@ComponentScan 
@EnableIntegration 
@IntegrationComponentScan 

Ok, наконец, этот вопрос с получением ответа от шлюза. Оказывается, механизм ответа шлюза зависит от некоторых токенов, передаваемых в заголовке сообщения. Поэтому, если ваша служба связана с некоторыми преобразованиями сообщений, каждая из которых будет составлять новое сообщение, например, MessageBuilder, то токен ответа для исходного запроса будет потерян! Он все равно будет потерян, даже если вы используете «.mromMessage (inboundMessage)» в преобразовании. Для сохранения значения необходимо использовать метод copyHeaders. Я дам мой пример ниже, это для трансформаторного типа: строка заголовка

m1 = MessageBuilder 
    .withPayload(transformedOutboundPayload) 
    .copyHeaders(messageIn.getHeaders()) 
    .setHeader("headerKey", transformedHeaderValue) 
    .build(); 

Множества не является необходимой во всех случаях, мне нужно это, потому что мои трансформаторы модификации как полезной нагрузки и заголовка.

Хорошо, надеюсь, это поможет кому-то!

+1

> 'каждый будет составлять новое сообщение, например MessageBuilder ответ' Это одна из причин, по которой мы обычно рекомендуем использовать модель программирования POJO, а не напрямую обращаться к классам инфраструктуры, таким как 'MessageBuilder' - таким образом, заботиться обо всех надлежащих обслуживания заголовка. –