Является ли Apache Camel - Idempotent Consumer Pattern реализованным с помощью jdbcMessageIdRepository поточно-ориентированным? - PullRequest
1 голос
/ 20 мая 2019

Мне нужно реализовать идемпотентный потребительский паттерн в Camel (2.23.0), и я искал возможные реализации. В настоящее время я могу реализовать только JdbcMessageIdRepository или JpaMessageIdRepository , и мне было интересно, являются ли эти реализации поточно-ориентированными при обработке одновременных запросов? Я изучил исходный код этих классов в Camel Github, но не смог найти никакого кода, предотвращающего / обрабатывающего параллельный доступ.

Кто-нибудь может это подтвердить? Большое спасибо!

1 Ответ

2 голосов
/ 21 мая 2019

Короткий ответ : Да (в таблице БД с первичным ключом)


Длинный ответ : я попробовал сегодня (используя плагин Parallel Controller JMeter ) и заметил, что если я не установлю первичный ключ в таблице CAMEL_MESSAGEPROCESSED я получаю повторяющиеся записи при запуске нескольких одновременных HTTP-запросов. Однако, если я добавлю к этой таблице первичный ключ (что также рекомендовано документами верблюда), потребитель idempotent будет работать так, как ожидается.

Можно ли с уверенностью сказать, что о синхронизации заботится механизм первичного ключа на столе?

Я имею в виду, только один Request-thread успешно добавляет строку в таблицу CAMEL_MESSAGEPROCESSED, и, как я заметил во время моих тестов, остальные Request помечены как дубликаты

Camel (exchangeProperty(Exchange.DUPLICATE_MESSAGE)=true)
...