мул 4 чем можно заменить прослушку

#dataweave #mule4

Вопрос:

У меня есть пакетное задание mule 4, которое в основном считывает большой xml-файл с сервера sftp, преобразует и пакует записи перед заполнением таблицы базы данных. Файл довольно большой. Мне нужно было удалить таблицу перед ежедневной загрузкой данных. Я использовал прослушку с операцией удаления базы данных в mule 3.8.5 сразу после sftp, и это хорошо работало. поскольку прослушка больше не доступна в mule 4, как этого можно достичь. Я попытался установить содержимое sftp в переменную, затем выполнить удаление базы данных, а затем установить полезную нагрузку в переменную. Я столкнулся с ошибками. Я также думаю, что сохранение содержимого в переменную неэффективно, так как содержимое файла довольно большое. У меня мог бы быть отдельный поток с отдельным планировщиком, но это не кажется очень эффективным. Имеет ли смысл собирать разброс, если один маршрут удалит записи таблицы БД, а другой маршрут прочитает содержимое файла и будет действовать так, как описано выше. Любая помощь будет очень признательна.

Комментарии:

1. Какие ошибки были у вас в вашем подходе? Пожалуйста, будьте конкретны.

2. Спасибо @aled. Я не смог проверить ошибку и не запускал ее повторно, так как файл большой. Я все еще думаю, что установка всего содержимого файла в переменную кажется неэффективной. Я рассматриваю альтернативные способы сделать это, так как прослушка исчезла, а также у меня нет другого потока, чтобы просто удалить базу данных на основе планировщика. По крайней мере, нам, возможно, придется прибегнуть к этому. У нас также есть ряд интеграций, которые следуют аналогичной схеме.

Ответ №1:

Имейте в виду, что большинство компонентов Mule 4 имеют «целевую» конфигурацию на вкладке «Дополнительно», где вы можете настроить переменную и что вам нужно извлечь из ответа в эту переменную.

Просто установите цель для операции с базой данных (УДАЛИТЬ или УСЕЧЬ), и полезная нагрузка останется нетронутой.

Комментарии:

1. Thx @Хорхе Гарсия. Ваше решение выглядит многообещающим. Мой поток в основном представляет собой компонент SFTP — gt;Удаление БД-gt;gt;Преобразование-gt;gt;gt;Пакетный процесс. Я вижу, что в БД Удалить компонент Расширенная вкладка Целевая переменная и Целевое значение. Целевое значение по умолчанию равно полезной нагрузке. Мое удаление должно стереть всю таблицу, и следующим шагом будет чтение содержимого файла и преобразование. Целевое значение удаления, возможно, ничего не возвращает, не уверен, что db delete что-либо возвращает. В идеале целевым значением должно быть содержимое файла. Не уверен, что я все правильно понял. Не могли бы вы поподробнее, пожалуйста.

2. Привет! В основном вам нужно сделать следующее: в компоненте БД задайте имя переменной в «Целевой переменной» (что-то вроде «dbDeleteResponse») и оставьте «Целевое значение» по умолчанию. Вы не будете использовать эту переменную позже, но при этом файл будет передаваться напрямую из SFTP в компонент преобразования.

3. Да, я сделал это, и это сработало.

Ответ №2:

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

И да, сохранение содержимого в переменную не рекомендуется, и, поскольку вы используете mule4, потоки теперь повторяются, т. е. вы можете прочитать поток более одного раза. Таким образом, вы можете напрямую получить доступ к полезной нагрузке в scatter gather.