Параллельное потребление из CXF-конечной точки - PullRequest
0 голосов
/ 26 марта 2019

Я столкнулся с проблемой параллельного потребления из CXF-конечной точки.Если я отправлю, например, 50 или более одновременных запросов в веб-сервис, опубликованный как CXF-конечная точка на маршруте Camel, только 25 потоков потребляют его и начинают обработку маршрута.Такая ситуация возникает независимо от обработки запроса SYNC / ASYNC на веб-сервере (Jetty используется по умолчанию).Я попытался увеличить размер пула Jetty - безрезультатно также.Таким образом, вопрос: где определен предел параллельного потребления из CXF-конечной точки.

У нас есть Apache Camel 2.15.1, Apache CXF 3.0.4 под JBossFuse 6.2.1

Вот Jettyи конфигурация конечной точки CXF:

<!-- Jetty -->

<bean id="server" class="org.eclipse.jetty.server.Server"/>

<httpj:engine-factory bus="cxf">
    <httpj:identifiedThreadingParameters id="sampleThreading1">
        <httpj:threadingParameters minThreads="100" maxThreads="200"/>
    </httpj:identifiedThreadingParameters>

    <httpj:engine port="9001">
        <httpj:threadingParametersRef id="sampleThreading1"/>
        <httpj:connector>
            <bean class="org.eclipse.jetty.server.bio.SocketConnector">
                <property name = "port" value="9001" />
            </bean>
        </httpj:connector>
        <httpj:handlers>
            <bean class="org.eclipse.jetty.server.handler.DefaultHandler"/>
        </httpj:handlers>
        <httpj:sessionSupport>true</httpj:sessionSupport>
    </httpj:engine>
</httpj:engine-factory>

<!-- CXF -->

<cxf:cxfEndpoint
        id="abcOutboundService"
        address="http://localhost:9001/cxf/ABCOutbound"
        xmlns:s="http://www.smpbank.ru/ABC"
        serviceName="s:ABCOutboundRq"
        endpointName="s:ASBOABCOutPort"
        wsdlURL="model/ASBOABCOut/ABCOutboundRq.wsdl">

    <cxf:properties>
        <entry key="dataFormat" value="PAYLOAD"/>
    </cxf:properties>
</cxf:cxfEndpoint>

И определение маршрута:

<camelContext id="AdpABCOutReq_WS" xmlns="http://camel.apache.org/schema/blueprint">
    <route id="adpabcout.ws" startupOrder="10" errorHandlerRef="wsProcessingErrorHandler">
        <from uri="cxf:bean:abcOutboundService"/>
        <log message="REQUEST CONSUMED BY Thread:[${threadName}] FROM WEB SERVICE: Headers:[${headers}]\nBody:[${body}]"/>

...

    </route>
</camelContext>

1 Ответ

0 голосов
/ 26 марта 2019

Возможно, вы работаете с лимитом рабочей очереди CXF.Вы можете попытаться настроить рабочую очередь с помощью

 <cxfcore:workqueue name="default" 
    highWaterMark="${work.queue.high.limit}" 
    lowWaterMark="${work.queue.low.limit}" 
    initialSize="${work.queue.initial.size}" 
    dequeueTimeout="${work.queue.timeout}" 
    queueSize="${work.queue.size}"/>

Значения по умолчанию: highWaterMark=25, lowWaterMark=5, initialSize=0, queueSize=256 и queueTimeout=2mins

...