#java #service #controller #expression #apache-nifi
#java #Обслуживание #контроллер #выражение #apache-nifi
Вопрос:
В рамках сложной модели потоков, которые реплицируются между доменами, я пытаюсь обобщить определение пользовательских controllerservices, которые используются во многих процессорах.
Добавление ControllerService к процессору работает так же, как и со свойствами: с помощью PropertyDescriptor.Конструктор, который принимает expressionLanguageSupported()
. Однако недостаточно хорошо документировано, как настроить это через пользовательский интерфейс или какие дополнительные шаги необходимо предпринять в коде процессора, который принимает указанный ControllerService
Когда я просто добавляю expressionLanguageSupported(true)
метод, выпадающий список меняется на свободный ввод с uuid настроенной службы. Я попытался поместить этот uuid в переменную, ограниченную группой процессов, с именем service1
, но средство проверки не принимает ${service1}
Что я делаю не так? мы используем Nifi 1.6
Ответ №1:
Службы контроллера не предназначены для работы таким образом. Вы можете использовать язык выражений, но, как вы говорите, вы будете вынуждены передать идентификатор службы контроллера.
Для этого есть решение с помощью службы поиска. Например, процессоры SQL могут использовать dbcpconnectionpoolollookup для динамической передачи службы контроллера DBCPConnectionPool процессору.
Вы могли бы использовать этот способ в своем пакете.
Редактировать:
Вы также должны знать, что если вы ссылаетесь на службу контроллера без поддержки языка выражений и создаете шаблон из своего потока, то при его развертывании процессор будет ссылаться на службу контроллера, которая была только что создана с помощью вашего шаблона.
Комментарии:
1. я согласен с передачей идентификатора службы контроллера. Я, в основном, хочу избежать необходимости вручную перебирать каждый процессор для выбора соответствующего controllerservice при каждом развертывании шаблона. Если быть точным в вашем ответе, этот идентификатор не может быть предоставлен переменной с ограниченной областью действия? если да, то разрешение языка выражений для свойств службы контроллера кажется довольно бесполезным?
2. @chaixdev Это не бесполезно. Вы должны передать идентификатор службы контроллера, но вы можете передать его с помощью реестра переменных и языка выражений.
3. @chaixdev также смотрите правку. Я думаю, что было бы более уместно просто использовать его как есть, поскольку NiFi поддерживает ссылки на службы контроллера в шаблоне.