Только первое сообщение доставляется на сервер - PullRequest
1 голос
/ 25 июня 2010

Я пытаюсь опросить БД на стороне клиента и отправить результат по 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>

РЕДАКТИРОВАТЬ: Каждый раз, когда я перезагружаю клиента, сервер получает одно сообщение.

решено: мне пришлось изменить подпись StorageService с

public void store(Message msg)

до

public Message store(Message msg)

Ответы [ 2 ]

3 голосов
/ 28 июня 2010

Если вы хотите использовать пустую подпись, используйте http: inbound-channel-adapter вместо http: inbound-gateway.

Как правило, все шлюзы являются двусторонними, а все канальные адаптеры едины.Таким образом, шлюз будет ожидать или генерировать ответ, а канал-адаптер не будет.

Активатор службы может выполнять обе роли в зависимости от типа возвращаемого метода, в который он обернут.Это также стало причиной вашей проблемы.

Кстати, вы также можете заставить свой метод принимать полезные данные сообщения, что облегчит тестирование и повторное использование.

public StorageResult store(Storable s, Map headers);
0 голосов
/ 25 июня 2010

Попробуйте удалить емкости очереди.Почему они у вас там в любом случае?

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