Перед тем, как опубликовать этот вопрос об Apache NiFi InvokeHTTP, я рассмотрел все остальные вопросы и ответы на них, но я все еще не уверен, какой поток у меня должен быть. Моя ситуация следующая:
1) Из Apache Kakfa я получаю необработанные метаданные.
2) Используя EvaluateJSONPath, я получаю нужный мне атрибут.
3) Используя RouteOnAttribute, я создал 3 маршрута на основе значения атрибута, полученного на шаге 2 выше.
4) Теперь, основываясь на значении атрибута, я хочу решить, следует ли мне использовать GET, POST или Delete.
5) Мой вопрос: где / как установить сообщение POST? ПОЛУЧИТЬ сообщение? Удалить тело сообщения?
6) Я могу установить URL-адрес в части конфигурации, предоставленной InvokeHTTP. Но тело сообщения, я не знаю, что это за свойство? или его в файле потока с помощью ReplaceText?
Я где-то читал, что перед тем, как вы перенаправляете свой HTTP-запрос Restful POST на InvokeHTTP, у вас должен быть другой процессор, перед которым изменяется содержимое файла потока.
Ссылка: Настройка HTTP-запроса POST от Nifi
Пожалуйста помоги. Спасибо. С уважением, Йешвант
Для POST телом будет все, что есть в содержимом потокового файла.
GET и DELETE обычно не имеют тела, поскольку информация обычно предоставляется в параметрах URL или запроса.
Спасибо, Брайан. Можете ли вы сказать мне в конфигурации: 1) Каким должно быть значение свойства для типа содержимого поля для GET, POST, PUT и DELETE? Я установил $ {mime.type}? 2) Каким должно быть значение «Атрибуты для отправки»? Если вы читаете следующую ссылку, кто-то сказал, что значение «Атрибуты для отправки» должно быть - content-type = application / json community.hortonworks.com/questions/55615/…
Вам необходимо выяснить, какой веб-сервис, с которым вы взаимодействуете, принимает эти операции. Для запроса, у которого нет тела, такого как GET или DELETE, тип содержимого не имеет особого значения. Для POST или PUT, если веб-служба принимает JSON, тогда это должно быть application / json, если у вас есть json в теле файла потока.
Я бы представил, что вы не используете NiFi, а затем подумал бы о том, что бы вы отправили для content-type, если бы вы использовали Curl, Postman или какой-либо другой инструмент для совершения звонков. Какие бы значения вы не использовали в другом инструменте, они будут такими же, как у NiFi.
В дополнение к тому, что объяснил Брайан, POST будет использовать содержимое FlowFile в качестве тела сообщения, поэтому, если у вас есть другие данные, которые вы хотите стереть / преобразовать во что-то, а затем отправить как тело сообщения, вы можете использовать следующие процессоры:
ExtractText
для чтения данных из существующего содержимого FlowFileReplaceText
, чтобы стереть существующее содержимое FlowFile и заменить его другимЧтобы установить заголовки для вызовов REST, InvokeHTTP
имеет свойство Attributes to Send
свойство, которое принимает регулярное выражение, которое будет сканироваться по атрибутам входящих FlowFiles, и какие бы атрибуты ни совпадали, берутся и отправляются как заголовок HTTP.
Чтобы добавить новый атрибут в существующий FlowFile, вы можете использовать UpdateAttribute
все верно - содержимое потокового файла попадет в тело HTTP-запроса. Итак, вы можете использовать ReplaceText или другие процессоры изменения содержимого до InvokeHTTP, чтобы установить тело запроса