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

Этот роут слушает 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
19.11.2017, 16:03
    #39555719
Андрей Панфилов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Camel иногда теряет последние байты файла при перемещении
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
19.11.2017, 17:07
    #39555738
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Camel иногда теряет последние байты файла при перемещении
Андрей Панфилов,

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

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

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

Код: java
1.
.noStreamCaching()

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

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

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

Код: java
1.
.noStreamCaching()

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

Код: java
1.
.noStreamCaching()

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

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

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

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

не релевантен?
...
Рейтинг: 0 / 0
20.11.2017, 13:13
    #39556122
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Camel иногда теряет последние байты файла при перемещении
попробовал рассовать
Код: 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
20.11.2017, 13:13
    #39556123
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Camel иногда теряет последние байты файла при перемещении
не помогло
...
Рейтинг: 0 / 0
20.11.2017, 14:33
    #39556194
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Camel иногда теряет последние байты файла при перемещении
я даже больше скажу - вот так не работает

Код: 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
20.11.2017, 22:56
    #39556438
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Camel иногда теряет последние байты файла при перемещении
Помогло добавить в урл
Код: java
1.
&readLock=changed
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Camel иногда теряет последние байты файла при перемещении / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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