порядок сообщений и параллельная обработка apache верблюд - PullRequest
0 голосов
/ 06 мая 2018

Я бы хотел обработать список пользовательских объектов Java, разделить их с помощью верблюжьего сплиттера и обработать его в параллельных потоках. Но проблема, с которой я сталкиваюсь, заключается в том, что список пользовательских объектов упорядочен на основе идентификатора, который должен быть записан в файл.

Как только я использую параллельную обработку, последовательность нарушается. Я просмотрел несколько статей, в которых предлагалось использовать «resequencer» или «single thread». Но при использовании одного потока обработка записей 5 КБ занимает огромное время.

Любые выводы будут очень полезны. Спасибо Нитин

Ответы [ 2 ]

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

Вы можете создать экземпляр AggregationStrategy, который сравнивает результаты newExchange и oldExchange и создать resultExchange с отсортированным списком пользовательских объектов Java на основе идентификатора.

Но, используя один поток, обработка записей 5k занимает огромное время.

Вы должны быть осторожны, так как вы, возможно, не захотите раскручивать 5k параллельных потоков, но вместо этого создайте свой собственный пул потоков, присоедините его в разбиении с помощью executorServiceRef. Таким образом, вы можете контролировать количество потоков и решать, что делать, когда ваша очередь заполнена.

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

У меня была похожая проблема при разделении запроса XMl на основе тега "XXX". Затем обрабатывает разделенный запрос и объединяется в ответ. Порядок Агрегированного ответа не совпадает с запросом.

ИСПРАВЛЕНИЕ: проблема была решена с помощью агрегации «StrategyRef» в EIP сплиттера.

Пример кода:

    <route>
        <from id="_from1" uri="activemq:DocumentGenerationQueue" />
        <split  parallelProcessing="true" streaming="false"  strategyRef = "AggregateTask" >
        <tokenize token="XXX" xml="true" />
            <to id="_to71"  uri="bean:ProcessorBean" />
            <to id="_to72"  uri="activemq:SplittedResponseQueue" />
        </split>
        <to uri="activemq:AggregatedResponseQueue" />
    </route>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...