Файл перемещения Mule FTP на основе фильтра имени файла-шаблона

Текущая ситуация:

Мул версии 3.5.0

У меня есть FTP-сервер, к которому я могу подключиться с помощью ftp:inbound-endpoint, используя определенный путь. По этому конкретному пути помещается множество файлов (некоторые для нас, некоторые для других), поэтому я использую фильтр имени файла с подстановочными знаками для фильтрации по определенным шаблонам имен файлов:

<flow name="flowA">
    <ftp:inbound-endpoint host="${ftp.host}" port="${ftp.port}" user="${ftp.username}" password="${ftp.password}" path="${ftp.root.in}">
        <file:filename-wildcard-filter pattern="${environment}*TYPE_A*.xml.gz" caseSensitive="false"/>
        <gzip-uncompress-transformer/>
    </ftp:inbound-endpoint>
    <file:outbound-endpoint path="${home.dir}/typeA/in" responseTimeout="10000" outputPattern="#[message.inboundProperties.originalFilename]"/>
</flow>

Это прекрасно работает, но теперь я также хочу создать еще один поток, который ищет по тому же пути FTP файлы с другим именем:

<flow name="flowB">
    <ftp:inbound-endpoint host="${ftp.host}" port="${ftp.port}" user="${ftp.username}" password="${ftp.password}" path="${ftp.root.in}">
        <file:filename-wildcard-filter pattern="${environment}*TYPE_B*.xml.gz" caseSensitive="false"/>
        <gzip-uncompress-transformer/>
    </ftp:inbound-endpoint>
    <file:outbound-endpoint path="${home.dir}/typeB/in" responseTimeout="10000" outputPattern="#[message.inboundProperties.originalFilename]"/>
</flow>

Это дает мне следующее исключение:

Caused by: org.mule.api.transport.ConnectorException: There is already a listener registered on this connector on endpointUri: XXX

Это означает, что невозможно иметь две конечные точки ftp:inbound-points, прослушивающие один и тот же хост, но с разными фильтрами подстановочных имен файлов...

Как я могу это решить? Указать ли один поток с одной ftp:inbound-endpoint и разделить входящие файлы на основе имени файла, или есть возможность включить прослушивание разных ftp:inbound-endpoint на одном и том же хосте?


person Mathias G.    schedule 29.07.2015    source источник
comment
Я не думаю, что вы можете иметь обе конечные точки. Существует фильтр регулярных выражений, который вы можете использовать для получения файлов обоих типов, а затем вы можете снова выполнить маршрутизацию с помощью элемента выбора (или, что еще лучше, установить переменную пути для использования позже в исходящем). ХТН.   -  person afelisatti    schedule 29.07.2015
comment
Используйте одну входящую конечную точку ftp (для получения всех файлов), затем используйте фильтр на основе подстановочного знака и направьте его в другое место назначения, как это было предложено @afelisatti.   -  person star    schedule 30.07.2015


Ответы (2)


Вы можете попробовать два с двумя разъемами, например:

<sftp:connector name="SFTP" validateConnections="false" doc:name="SFTP" autoDelete="false" />
<sftp:connector name="SFTP1" validateConnections="false" doc:name="SFTP" autoDelete="false"/>

И использовать потом как...

<sftp:inbound-endpoint connector-ref="SFTP" ......
<sftp:inbound-endpoint connector-ref="SFTP1" .....

Отв.

person udit khare    schedule 19.07.2018

Вместо использования одной глобальной конфигурации соединителя для всех компонентов FTP используйте новую конфигурацию соединителя каждый раз для другого компонента FTP. У меня все получилось!

Эта проблема возникает из-за того, что один и тот же хост используется для нескольких компонентов FTP. Я знаю, что мы делаем то же самое для других компонентов, таких как БД (сохраняя одну глобальную конфигурацию для всех компонентов), и это работает просто отлично, но необычно это не работает для FTP.

person KMJ    schedule 11.12.2020