2012-06-28 5 views
0

다음 코드를 사용하여 int-jms : message-driven-channel-adapter를 만듭니다. 그러나 폴링을 기반으로 한 것 같습니다. 간격보다는 틱.스프링 통합 DSL 메시지 기반 jms 수신기가 대신 폴러를 사용합니다

내가 정의 흐름은 다음과 같습니다

jms.listen(requestDestinationName = "myTopic", connectionFactory = connectionFactory).additionalAttributes(requestPubSubDomain = true) --> ... 

는 질문은, 어떻게 메시지 구동하는 것입니다?

답변

1

scala dsl에서 기본 구현을 검사 한 결과 기본값으로 DefaultMessageListenerContainer를 내부적으로 사용하는 jms:inbound-gateway (메시지 기반 채널 어댑터 아님)을 만드는 것으로 나타났습니다. 그래서 네, 그것은 메시지 기반의 컨테이너 내부적으로 게이트웨이 구성 요소를 사용하는 것으로 보이기 때문에 요청/응답 유형의 흐름이 있습니다. 이것은 폴링 대신 1 초 지연으로 볼 수 있습니다.

lazy val subscribeChannel = { 
    val c = new SubscribableJmsChannel(jmsContainer, jmsTemplate) 
    c.afterPropertiesSet() 
    c.subscribe(new MessageHandler { 
    def handleMessage(message: Message[_]) {processMessage(message)} 
    }) 
    c 
} 

subscribeChannel.start() 
processMessage를 (메시지) 내 처리 기능이다

lazy val jmsContainer= { 
    val c = new DefaultMessageListenerContainer 
    c.setConnectionFactory(connectionFactory) 
    c.setDestination(dest) 
    c.setPubSubDomain(true) 
    c.afterPropertiesSet() 
    c 
} 

, SubscribableJmsChannel는 JMS를 매핑하지 않음을 유의하시기 바랍니다 :

+0

네, 저도 발견했습니다. 그것을 pub-sub로 만들 수있는 방법이 있습니까? – nau

+0

나는 MessageListener를 사용하기로 전락했고 JMS TextMessage를 Spring 통합 메시지로 변환해야한다. 그렇게 할 수있는 간단한 방법이 있습니까? – nau

+0

변환을 수행하기 위해 실제로 아무 것도 할 필요가 없습니다. - 스프링 통합은 JMS의 메시지를 내부 스프링 통합 메시지 구조에 자동으로 매핑합니다. –

1

확인, 해결 방법으로 나는 수동 SubscribableJmsChannel를 만들 속성을 SI 메시지 헤더에 추가하십시오! 스프링 통합 XML 흐름 정의를 사용해야했습니다.