Обработка сообщений останавливается / приостанавливается на короткий период случайной весной интеграции - PullRequest
0 голосов
/ 28 января 2019

У меня есть приложение, которое использует интегрированную среду Spring для обработки сообщений (Gateway -> Transform -> Service Activators).Одна из проблем, с которой я сталкиваюсь, заключается в том, что для обработки сообщений существует значительная задержка, которая варьируется от нескольких миллисекунд до нескольких секунд.Задержка не согласована, кажется, что сообщения задерживаются и обрабатываются сразу в пакете.

Я попытался профилировать приложение с помощью YourKit, но не смог найти тупиков или заблокированных потоков.Включение журналов DEBUG для org.springframework.integration также не дало много информации.Вот весенняя интеграция xml:

    <int:gateway service-interface="com.test.MessageGateway"
            id="msggateway" default-request-channel="msginputchannel" />

    <int:channel id="msginputchannel">
            <int:queue capacity="5000" />
    </int:channel>

    <int:bridge id="msginputbridge" input-channel="msginputchannel" output-channel="msgchannel">
            <int:poller fixed-delay="100"/>
    </int:bridge>

    <int:channel id="msgchannel">
            <int:queue capacity="5000" />
    </int:channel>

    <int:transformer input-channel="msgchannel"
            output-channel="msgPubSubchannel" id="msgtransformer" ref="msgserializer" method="serialzeTo" >
            <int:poller fixed-delay="100"  />
    </int:transformer>

    <int:publish-subscribe-channel id="msgPubSubchannel" />

    <int:bridge id="msgQueueSystembridge" input-channel="msgPubSubchannel" output-channel="msgQueueSystemqueuechannel"/>
    <int:channel id="msgQueueSystemqueuechannel">
            <int:queue capacity="5000"/>
    </int:channel>

    <int:service-activator id="msgQueueSystempublisher" ref="msgQueueSystemadapter" input-channel="msgQueueSystemqueuechannel" method="publish" >
            <int:poller fixed-delay="100"/>
    </int:service-activator>

    <int:bridge id="msgbridge" input-channel="msgPubSubchannel" output-channel="msgFileSystemchannel"/>
    <int:channel id="msgFileSystemchannel">
            <int:queue capacity="5000"/>
    </int:channel>

    <int:service-activator id="msgfilewriter" ref="msgadapter" input-channel="msgFileSystemchannel" method="publish" >
            <int:poller fixed-delay="100"/>
    </int:service-activator>

Есть ли какие-нибудь указатели о том, как отладить это?

1 Ответ

0 голосов
/ 28 января 2019

Вы используете много QueueChannel с, и все их задачи опроса основаны на TaskSheduler по умолчанию с пулом потоков равным 10.Таким образом, для вас действительно может быть узким местом, что все задачи просто разделяют только эти 10 потоков.

Вы можете подумать, что не используйте столько промежуточных очередей: я не вижу причины ставить в очередь всешаги в потоке.

С другой стороны, вы можете увеличить размер этого пула до нужного числа, используя свойство spring.integration.taskScheduler.poolSize интеграции: https://docs.spring.io/spring-integration/docs/current/reference/html/whats-new.html#x51.-global-properties

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...