Spring Integration Http + amqp rabbitmq-Concurrency Проблемы для 100 пользователей

Я использую spring Http Integration и amqp для rabbit mq, его сбой при нагрузочном тестировании для одновременных пользователей... Счетчики сообщений, которые отображаются в счетчиках сообщений jmeter и rabbitmq, не совпадают. Он отлично работает до 30 пользователей.

<int-http:inbound-gateway id="logIngesterGatewayBulk"
        supported-methods="POST" request-channel="logIngesterRestEndpointBulk"
        path="/rest/log/bulk" error-channel="errorChannel" reply-timeout="10" 
        request-payload-type="java.lang.String">
    </int-http:inbound-gateway>

<int:filter input-channel="logIngesterRestEndpointBulk"
        throw-exception-on-rejection="true" method="validate" ref="payloadValidation"
        output-channel="filterChannelbulk">
    </int:filter>

     <int:chain input-channel="filterChannelbulk" output-channel="messageOutputChannel" id="chaining" >
        <int:splitter id="splitter" ref="payloadSplitter" method="splitPayLoad" >

        </int:splitter>
        <int:transformer id="logMessageTransformerbulk" ref="logMessageHeaderTransformer"
            method="transform">
        </int:transformer>
    </int:chain>
    <int:service-activator input-channel="errorChannel"
        ref="responseHandler" method="handleFailedPayLoad">
    </int:service-activator>


<int-amqp:outbound-channel-adapter  
        id="amqpAdapter" channel="messageOutputChannel" amqp-template="amqpTemplate" 
        exchange-name="dhp_exchange" routing-key-expression="headers['routingKey']">

person Navaneeth    schedule 01.11.2015    source источник


Ответы (1)


Вам нужно выяснить, почему существуют несоответствия. Боюсь, отладка 101.

Начните с выяснения того, какие сообщения были потеряны и почему — ведение журнала DEBUG поможет, но может быть утомительно отслеживать журналы, чтобы следить за каждым сообщением, но информация определенно там есть. Не забудьте указать имя потока в конфигурации журнала; это обязательно при отладке многопоточных приложений.

Вам необходимо убедиться, что ваш код является потокобезопасным — payloadValidation, payloadSplitter, logMessageHeaderTransformer bean-компоненты и т. д. — нет общего состояния (полей) или правильности синхронизации.

person Gary Russell    schedule 01.11.2015
comment
Эй, это решается с помощью ‹task:executor id=bulkChannelExecutor /› - person Navaneeth; 03.11.2015
comment
теперь он может получать 100 одновременных пользовательских запросов... спасибо - person Navaneeth; 03.11.2015