2015-02-20 3 views
1

У меня есть требование, когда наше приложение, основанное на Camel, может получать огромные ответы (50 + mb). Нам нужен способ отклонить такие огромные ответы. Я не мог найти встроенную функцию в Camel, которая позволяет это.Дросселирование путем отклонения в зависимости от размера полезной нагрузки от ответа в Apache Camel

На данный момент я планирую создать настраиваемый дроссель, поскольку я исчерпал себя в поиске в Интернете для внешних пользовательских компонентов Camel, которые предлагают эту функцию.

Прежде чем повторно изобретать колесо, я подумал, что если кто-то уже столкнулся с этим сценарием и получил решение, которое может быть предоставлено мне.

Заранее спасибо.

+0

Где полезные нагрузки, поступающие из (например, веб-сервиса, очереди и т.д.) и тем, что формат (текст, XML, двоичном?) – vikingsteve

+0

Ответ может в конечном счете, перетекают через http или mq в любом формате, таком как json, xml, фиксированный позиционный и т. д. На данный момент это от веб-службы ответчика в формате мыла. –

ответ

1

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

Processer:

int payloadSize = exchange.getIn().getBody(byte[].class).length; 
exchange.getIn().setHeader("payloadSize", payloadSize) 

, а затем в вашем маршруте:

.filter(header("payloadSize").isLessThan(50 * 1024 * 1024)) 
+0

Большое спасибо Стив, я постараюсь и последую за ним, если нужно –

0

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

Помните, что шаблон EIP дросселя не отклоняет сообщение, он только замедляет сообщения. Чтобы отклонить сообщение, используйте Content Based Router, Filter и т. Д.

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

+0

Большое спасибо Клаусу, я постараюсь и последую за ним, если понадобится. Наша потребность в том, чтобы даже не допустить, чтобы сообщение попало в наше приложение, основанное на Camel, для уменьшения огромных загрузок на сервере. –