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>

編集:クライアントを再起動するたびに、サーバーは単一のメッセージを受信します。

解決済み: StorageService の署名を から変更する必要がありました

public void store(Message msg)

public Message store(Message msg)
4

2 に答える 2

3

void 署名を使用する場合は、http:inbound-gateway の代わりに http:inbound-channel-adapter を使用してください。

一般に、すべてのゲートウェイは双方向であり、すべてのチャネル アダプターは一方向であるため、ゲートウェイは応答を待機または生成しますが、チャネル アダプターはそうしません。

サービス アクティベーターは、ラップされているメソッドの戻り値の型に応じて、両方の役割を実行できます。これも問題の原因であることが判明しました。

ところで、メソッドがメッセージのペイロードを受け入れるようにすることもできます。これにより、テストと再利用が容易になります。

public StorageResult store(Storable s, Map headers);
于 2010-06-28T12:41:58.193 に答える
-1

キューの容量を削除してみてください。とにかくなぜそこにいるのですか?

于 2010-06-25T12:35:11.257 に答える