Apache Camel, как получить размер полезной нагрузки ввода xml? - PullRequest
0 голосов
/ 23 мая 2018

Есть ли способ, которым мы можем получить размер входной полезной нагрузки в теле обмена. Я хотел бы сжать содержимое, если размер содержимого превышает 50 МБ.

1 Ответ

0 голосов
/ 23 мая 2018

Немного окольный, но я использую верблюдов Потоковое кэширование .После настройки просто проверьте, преобразовано ли тело в StreamCache.(Поток, который допускает многократное чтение. В первую очередь полезен при работе с очень большими файлами).Мне приходится иметь дело с файлами размером более 10 ГБ, так что это хороший способ не сжечь jvm с помощью outoffmemory, но также не беспокоиться о потере полезной нагрузки, читая его.

План (не уверен, что такое jboss equivelent) хотел бы

<!-- define a bean of type StreamCachingStrategy which CamelContext will automaticly use -->
<bean id="streamStrategy" class="org.apache.camel.impl.DefaultStreamCachingStrategy">
    <property name="spoolDirectory" value="${java.io.tmpdir}/camelcache/#uuid#/"/>
    <property name="spoolThreshold" value="52428800"/>
    <property name="spoolUsedHeapMemoryThreshold" value="70"/>
    <property name="anySpoolRules" value="true"/>
</bean>

<camelContext streamCache="true" xmlns="http://camel.apache.org/schema/blueprint">

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

Если вас не беспокоит память, вы можете сойти с ума и в своем предикате взять полезную нагрузку в виде потока, прочитать все байты в память как байт [], а затем протестировать размерbyte [] (или считайте байты, когда вы читаете их из потока).Просто в зависимости от источника полезной нагрузки вы не сможете сбросить поток, если сначала не кешируете его.

...