1

私は現在、ゲートウェイを介して春の統合チャネルを使用していますが、非常に奇妙な (そして迷惑な) 動作が見られます。メッセージは、送信されてから非常に遅く (1 分以上) 処理されます。

チャネルは独自のスレッド プールによって非同期的に処理されるため、これらのスレッドは単にアクティブではないと思います。これらのメッセージの送信は非常に重要であるため、現在のスレッドでメッセージの同期処理を強制したいと考えています。

これは可能ですか?

私の現在の設定:

<int:annotation-config />
<task:executor id="integrationPool" pool-size="0-100" />
<int:poller default="true" task-executor="integrationPool" fixed-rate="50" />

<int:channel id="loggableevents">
    <int:queue />
</int:channel>
<int:channel id="outgoingevents">
    <int:queue />
    <int:interceptors>
        <int:wire-tap channel="loggableevents" />
    </int:interceptors>
</int:channel>

<int:outbound-channel-adapter channel="outgoingevents" method="handleMessage" ref="momadapter" />
<bean id="momadapter" class="my.project.mom.EventSendingMessageHandler" />

<!-- Logging -->
<int:outbound-channel-adapter channel="loggableevents" ref="loggingadapter" method="handleMessage" />
<bean id="loggingadapter" class="my.project.logging.EventLoggingHandler" />

<int:gateway id="eventgateway" service-interface="my.project.mom.EventGateway" default-request-channel="outgoingevents" />

便宜上ゲートウェイを使用していますが、チャネルに直接アクセスした方がよいでしょうか?

4

2 に答える 2

4

<queue/>要素をチャネルから削除するだけoutgoingEventsで、呼び出し元のスレッドですべて実行されます。

http://static.springsource.org/spring-integration/docs/2.1.2.RELEASE/reference/html/messaging-channels-section.html

于 2012-06-06T14:11:44.873 に答える
0

この回答が得られ、インターフェースベースのゲートウェイを使用している場合。メッセージ チャネルの使用は必須です。その場合の解決策は、直接チャネルを使用することです。次のコード サンプルは、Java DSL を使用してこれを行う方法を示しています。

@Bean(name = "spa.import.zipcodes")
public MessageChannel queueRecordsChannel() {
    return MessageChannels.direct().get();
}

DirectChannel の詳細については、このページを確認してください: http://docs.spring.io/spring-integration/reference/html/messaging-channels-section.html

于 2015-05-21T14:47:44.470 に答える