Как определить ControllerService с помощью языка выражений в Nifi

#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 поддерживает ссылки на службы контроллера в шаблоне.