2010-06-25 13 views
1

J'essaie d'interroger un DB côté client et d'envoyer le résultat via HTTP à un serveur qui collecte des données. Malheureusement, seul le premier message est livré. Je suis nouveau à l'intégration de printemps (1.0.3)Seul le premier message est remis au serveur

Quel est le problème avec ma configuration?

clients config:

<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> 

serveurs config:

<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> 

EDIT: Chaque fois que je redémarrer le client un seul message sera reçu par le serveur.

RESOLU: Je devais changer la signature de StorageService de

public void store(Message msg) 

à

public Message store(Message msg) 

Répondre

3

Si vous souhaitez utiliser une signature vide, utilisez un adaptateur http: inbound-channel au lieu de http: inbound-gateway.

En général, toutes les passerelles sont bidirectionnelles et toutes les cartes de canal sont à sens unique, de sorte qu'une passerelle attend ou génère une réponse, ce qui n'est pas le cas d'un adaptateur de canal.

Un activateur de service peut effectuer les deux rôles, en fonction du type de retour de la méthode dont il est entouré. Cela s'est avéré être la cause de votre problème. Par ailleurs: vous pouvez également faire en sorte que votre méthode accepte la charge utile du message, ce qui la rendra plus facile à tester et à réutiliser.

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

Essayez de supprimer les capacités de file d'attente. Pourquoi les avez-vous là de toute façon?

+0

merci j'ai supprimé les capacités de file d'attente qui n'avaient aucun effet. – stacker

+0

la réponse est trompeuse, mais je suis d'accord le -1 est redondant – iwein