powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Camel иногда теряет последние байты файла при перемещении
10 сообщений из 10, страница 1 из 1
Camel иногда теряет последние байты файла при перемещении
    #39555654
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Суть кода в том, что читаем файлы из одного места, анализируем их и кладём в другое место

Этот роут слушает sftp и другой роут
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
//sftp
from(String.format("sftp://%s@%s:%d/%s?password=%s&delete=true",
        sftpConfiguration.getUsername(),
        sftpConfiguration.getHost(),
        sftpConfiguration.getPort(),
        sftpConfiguration.getSourcePath(),
        sftpConfiguration.getPassword()))
    .from("seda:file_upload")
    .process(new Processor() {
        @Override
        public void process(Exchange exchange) {
            try {
                isCsv = CSV.equals(new 
                Tika().detect(exchange.getIn().getBody(InputStream.class), fileName));
            } catch (IOException e) {
                ....
                return;
            }
            final List<Map<String, Object>> parsedLines = misCsvParser.parse(exchange.getIn().getBody(InputStream.class), fileName);
            ...
        }
    }).to("seda:parsed_csv");

    from("seda:parsed_csv")
        .to(String.format("sftp://%s@%s:%d/%s?password=%s",
                    sftpConfiguration.getUsername(),
                    sftpConfiguration.getHost(),
                    sftpConfiguration.getPort(),
                    sftpConfiguration.getDestPathRejected(),
                    sftpConfiguration.getPassword()));   



с sftp всё понятно, а на другой стороне
Код: java
1.
.from("seda:file_upload")



Код: java
1.
producerTemplate.sendBodyAndHeaders("seda:file_upload", multipartFile.getBytes(), headers) 



Так вот выяснилось, что если кладёшь в sftp папку файл размером 20MB, то в другое место может прилететь файл 6MB. Это же справедливо и для файлов полученных из второго from роута. Это поведение воспроизводится только на тестовом окружении и не воспроизводится на локальных машинах.

Есть идеи, что тут не так?
...
Рейтинг: 0 / 0
Camel иногда теряет последние байты файла при перемещении
    #39555719
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner
Код: java
1.
2.
3.
4.
5.
6.
7.
                Tika().detect(exchange.getIn().getBody(InputStream.class), fileName));
            } catch (IOException e) {
                ....
                return;
            }
            final List<Map<String, Object>> parsedLines = misCsvParser.parse(exchange.getIn().getBody(InputStream.class), fileName);
            


Есть идеи, что тут не так?Вам какбы никто не гарантирует, что exchange.getIn().getBody(InputStream.class) можно несколько раз вызывать: http://camel.apache.org/stream-caching.html
...
Рейтинг: 0 / 0
Camel иногда теряет последние байты файла при перемещении
    #39555738
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей Панфилов,

Спасибо за ответ. Попробую явно отключить кеширование.

Но что-то мне кажется дело не в этом потому, что setBody/setIn и тд я нигде в коде не делаю.

У меня java DSL как Вы видите.

Код: java
1.
.noStreamCaching()

нужно после каждого from писать?
...
Рейтинг: 0 / 0
Camel иногда теряет последние байты файла при перемещении
    #39555740
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей Панфилов,

или Вы имеете ввиду, про что-то типа

https://stackoverflow.com/a/925036/2674303
...
Рейтинг: 0 / 0
Camel иногда теряет последние байты файла при перемещении
    #39555780
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerУ меня java DSL как Вы видите.

Код: java
1.
.noStreamCaching()

Ну там же все написано - можно сразу в контексте, во-вторых, нужно не выключать (оно выключено по-умолчанию), а наоборот.
...
Рейтинг: 0 / 0
Camel иногда теряет последние байты файла при перемещении
    #39555848
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей ПанфиловquestionerУ меня java DSL как Вы видите.

Код: java
1.
.noStreamCaching()

Ну там же все написано - можно сразу в контексте, во-вторых, нужно не выключать (оно выключено по-умолчанию), а наоборот.

Спасибо, более детально почитаю. Меня собственное смутило, что я ничего не трогал а по умолчанию ведь и так выключено.

а мой поинт насчёт того, что я

автор setBody/setIn и тд я нигде в коде не делаю.

не релевантен?
...
Рейтинг: 0 / 0
Camel иногда теряет последние байты файла при перемещении
    #39556122
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
попробовал рассовать
Код: java
1.
 .streamCaching()

везде подярд
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
//sftp
from(String.format("sftp://%s@%s:%d/%s?password=%s&delete=true",
        sftpConfiguration.getUsername(),
        sftpConfiguration.getHost(),
        sftpConfiguration.getPort(),
        sftpConfiguration.getSourcePath(),
        sftpConfiguration.getPassword())).streamCaching()  //<---- here
    .from("seda:file_upload").streamCaching()  //<---- here
    .process(new Processor() {
        @Override
        public void process(Exchange exchange) {
            try {
                isCsv = CSV.equals(new 
                Tika().detect(exchange.getIn().getBody(InputStream.class), fileName));
            } catch (IOException e) {
                ....
                return;
            }
            final List<Map<String, Object>> parsedLines = misCsvParser.parse(exchange.getIn().getBody(InputStream.class), fileName);
            ...
        }
    }).to("seda:parsed_csv").streamCaching();  //<---- here

    from("seda:parsed_csv")
        .to(String.format("sftp://%s@%s:%d/%s?password=%s",
                    sftpConfiguration.getUsername(),
                    sftpConfiguration.getHost(),
                    sftpConfiguration.getPort(),
                    sftpConfiguration.getDestPathRejected(),
                    sftpConfiguration.getPassword()));   
...
Рейтинг: 0 / 0
Camel иногда теряет последние байты файла при перемещении
    #39556123
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не помогло
...
Рейтинг: 0 / 0
Camel иногда теряет последние байты файла при перемещении
    #39556194
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я даже больше скажу - вот так не работает

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
from(String.format("sftp://%s@%s:%d/%s?password=%s&delete=true",
                sftpConfiguration.getUsername(),
                sftpConfiguration.getHost(),
                sftpConfiguration.getPort(),
                "test",
                sftpConfiguration.getPassword()))
                .to("seda:test_source");

        from("seda:test_source")
                .to(String.format("sftp://%s@%s:%d/%s?password=%s",
                        sftpConfiguration.getUsername(),
                        sftpConfiguration.getHost(),
                        sftpConfiguration.getPort(),
                        "test_dest",
                        sftpConfiguration.getPassword()));
...
Рейтинг: 0 / 0
Camel иногда теряет последние байты файла при перемещении
    #39556438
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогло добавить в урл
Код: java
1.
&readLock=changed
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Camel иногда теряет последние байты файла при перемещении
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]