Как сохранить синхронизацию файлов между несколькими экземплярами? так что только один экземпляр заберет файл и обработает его - PullRequest
0 голосов
/ 26 июня 2018

У меня есть приложение, которое использует Spring Integration. Мое приложение прослушивает данные из корзины S3 и, если доступны новые файлы, обрабатывает эти файлы

Теперь этот сценарий будет работать гладко, если у меня только один экземпляр моего приложения. В случае нескольких экземпляров существует вероятность, что файл обрабатывается несколькими экземплярами приложения. Как можно обойти эту проблему, чтобы мой файл обрабатывал только один экземпляр? Есть ли в Spring Integration встроенный атрибут, который я пропустил, который можно использовать для поддержки синхронизации? Можем ли мы выполнить механизм блокировки объектов S3 Bucket?

Здесь можно использовать P.S Quartz и Zookeeper, но я хочу посмотреть, какую еще альтернативу можно использовать здесь

1 Ответ

0 голосов
/ 26 июня 2018

Для этой цели Spring Integration предлагает:

 * Persistent file list filter using the server's file timestamp to detect if we've already
 * 'seen' this file.
 *
 * @author Artem Bilan
 */
public class S3PersistentAcceptOnceFileListFilter extends AbstractPersistentAcceptOnceFileListFilter<S3ObjectSummary> {

Таким образом, вы можете настроить S3InboundFileSynchronizer и настроить S3PersistentAcceptOnceFileListFilter через:

/**
 * Set the filter to be applied to the remote files before transferring.
 * @param filter the file list filter.
 */
public void setFilter(FileListFilter<F> filter) {

S3PersistentAcceptOnceFileListFilter должен быть настроен для любой возможной общей, постоянной реализации MetadataStore: https://docs.spring.io/spring-integration/docs/5.0.6.RELEASE/reference/html/system-management-chapter.html#metadata-store.

Например, начиная с версии 1.1, Spring Integration AWS предоставляет следующее:

/**
 * The {@link ConcurrentMetadataStore} for the {@link AmazonDynamoDB}.
 *
 * @author Artem Bilan
 *
 * @since 1.1
 */
public class DynamoDbMetaDataStore implements ConcurrentMetadataStore, InitializingBean {

P.S. В вашем вопросе нет ничего про Apache Camel ...

...