http出站网关一次只发送一个请求

时间:2015-09-04 10:43:59

标签: spring spring-integration

我有一个连接到一个URL的http出站网关。以下是代码段。我正在丢弃文件夹上的大约100个文件。 URL连接localhost:8080 / index.jsp。在JSP中我添加了Thread.sleep(60000)。

当我运行代码时,我发现每60秒只对JSP进行一次调用。但是我的泳池经理每条路线有25个连接。

不确定为什么它不起作用。有人遇到过类似的问题吗?

    <int:poller default="true" fixed-delay="50"/>

          <int:channel id="inputChannel">
            <int:queue  capacity="5"/>
          </int:channel>

          <int:channel id="httpInputChannel">
            <int:queue  capacity="5"/>
          </int:channel>

        <int-http:outbound-gateway id="simpleHttpGateway"
            request-channel="httpInputChannel" 
            url="${app.webservice.url}"
            http-method="GET"
            extract-request-payload="false"
            expected-response-type="java.lang.String"
            charset="UTF-8"
            reply-timeout="1234"
            request-factory="requestFactory"
            reply-channel="wsResponseChannel">
        </int-http:outbound-gateway>

        <bean id="requestFactory"
              class="org.springframework.http.client.HttpComponentsClientHttpRequestFactory">
            <constructor-arg ref="httpClient"/>
        </bean>

         <bean id="httpClient" class="org.apache.http.impl.client.DefaultHttpClient">
            <constructor-arg ref="poolManager"/>
        </bean>

        <bean id="poolManager" class="org.apache.http.impl.conn.PoolingClientConnectionManager">
            <property name="defaultMaxPerRoute" value="25"/>
            <property name="maxTotal" value="250"/>
        </bean>
      <int:channel id="wsResponseChannel">
            <int:queue  capacity="5"/>
        </int:channel>

        <int:service-activator ref="clientServiceActivator" method="handleServiceResult" input-channel="wsResponseChannel" />

        <bean id="clientServiceActivator" class="com.spijb.serviceactivator.ClientServiceActivator"/>

        <int-file:inbound-channel-adapter id="producer-file-adapter" channel="inputChannel" directory="file:c://Temp//throttling" prevent-duplicates="true"> 
            <int:poller fixed-rate="100" /> 
        </int-file:inbound-channel-adapter>

        <int-file:file-to-string-transformer
            id="file-2-string-transformer" input-channel="inputChannel"
            output-channel="httpInputChannel" charset="UTF-8" />

2 个答案:

答案 0 :(得分:1)

您的文件入站通道适配器上有一个轮询器线程。您需要将一个任务执行程序添加到轮询器,其中池大小设置为您要处理的并发请求数。

您还需要设置max-messages-per-poll,默认为1。

答案 1 :(得分:0)

我将配置更改为添加执行程序,如下所示。

<int-file:inbound-channel-adapter id="producer-file-adapter" channel="inputChannel" directory="file:c://Temp//throttling" prevent-duplicates="true"> 
        <int:poller fixed-rate="100" task-executor="executor" max-messages-per-poll="25"/> 
    </int-file:inbound-channel-adapter>

    <task:executor id="executor" pool-size="25"/>

仍然只是向我的tomcat服务器发送一个请求来监听index.jsp。我的理解是,如果通道队列中存在多条消息,现在httpInputChannel就是这种情况,http出站网关将处理多个请求。然而,这并没有发生。我进一步更改了我的默认轮询器,如下所示。

<int:poller default="true" fixed-delay="50" task-executor="executor"/>

经过上述更改后,http出站网关开始向URL发送多个请求。现在我很困惑。我们是否需要为出站网关明确分配执行程序以同时处理多条消息?有人可以指导我这个文档吗?

谢谢。