2010-06-25 6 views
1

클라이언트 측 DB를 폴링하고 결과를 HTTP를 통해 데이터를 수집하는 서버로 보냅니다. 불행히도 첫 번째 메시지 만 배달됩니다. 스프링 통합 (1.0.3)을 처음 사용했습니다.첫 번째 메시지 만 서버에 전달됩니다.

구성에 어떤 문제가 있습니까?

클라이언트 설정 :

<si:channel id="msgChannel"> 
    <si:queue capacity="1" /> 
</si:channel> 

<si:inbound-channel-adapter ref="jdbcInputAdapter" method="fetchData" channel="msgChannel"> 
    <si:poller max-messages-per-poll="1"> 
     <si:interval-trigger interval="5000" /> 
    </si:poller> 
</si:inbound-channel-adapter> 

<http:outbound-gateway id="httpChannelAdapter" request-channel="msgChannel" default-url="http://localhost:8080/company/gateway"/> 

<si:poller default="true"> 
    <si:interval-trigger interval="5000" /> 
</si:poller> 

서버 설정 :

<si:channel id="requestChannel"> 
     <si:queue capacity="4" /> 
</si:channel> 

<si:channel id="replyChannel" /> 

<http:inbound-gateway id="InboundGateway" request-channel="requestChannel" reply-channel="replyChannel"/> 

<bean id="shouter" class="com.company.Shouter"/> 
<si:outbound-channel-adapter ref="shouter" method="shout" channel="replyChannel"/> 

<si:service-activator input-channel="requestChannel" 
    ref="StorageService" method="store" 
    output-channel="replyChannel" /> 

<bean id="StorageService" class="com.company.StorageService" /> 

<si:poller default="true"> 
     <si:interval-trigger interval="1000" /> 
</si:poller> 

편집 : 매번 내가 하나의 메시지는 서버에 의해 수신 될 클라이언트를 다시 시작합니다.

해결 : 나는 큐의 용량을 제거해보십시오

public Message store(Message msg) 

답변

3

무효화 서명을 사용하려면 http : inbound-gateway 대신 http : inbound-channel-adapter를 사용하십시오.

일반적으로 모든 게이트웨이는 양방향이며 모든 채널 어댑터는 단방향이므로 게이트웨이는 응답을 기다리거나 생성합니다. 채널 어댑터는 그렇지 않습니다.

서비스 활성화자는 랩핑되는 메소드의 리턴 유형에 따라 두 역할을 모두 수행 할 수 있습니다. 이것은 또한 문제의 원인으로 밝혀졌습니다.

그런데 방법을 사용하여 메시지의 페이로드를 수락하면 테스트 및 재사용이 더 쉬워집니다.

public StorageResult store(Storable s, Map headers); 
-1

public void store(Message msg) 

에서 StorageService의 서명을 변경했다. 어쨌든 왜 그걸 가지고 있니?

+0

덕분에 아무 효과가없는 대기열 용량을 제거했습니다. – stacker

+0

대답은 오해의 소지가 있지만 -1은 중복되는 것에 동의합니다. – iwein

관련 문제