Как слушать файлы из GCS? Можно ли использовать GcsInboundFileSynchronizer и GcsStreamingMessageSource в многоузловых приложениях? - PullRequest
4 голосов
/ 06 марта 2020

Я читаю документацию по хранилищу gcp для Spring Cloud и там написано, что я могу прослушивать новые файлы, используя GcsInboundFileSynchronizer или GcsStreamingMessageSource, просто конфигурируя Spring bean следующим образом:

@Bean
@InboundChannelAdapter(channel = "streaming-channel", poller = @Poller(fixedDelay = "5000"))
public MessageSource<InputStream> streamingAdapter(Storage gcs) {
  GcsStreamingMessageSource adapter =
          new GcsStreamingMessageSource(new GcsRemoteFileTemplate(new GcsSessionFactory(gcs)));
  adapter.setRemoteDirectory("your-gcs-bucket");
  return adapter;
}

У меня есть пара вопросов:

  1. Что если мое приложение запущено на 2+ узлах. Как будут распространяться файлы? По-круговой ? есть ли способ настроить дозирование? Можно ли принимать повторные уведомления (как в pub sub и любых других системах MQ)?
  2. Что означает «новые файлы»? Допустим, моя корзина содержит 2 файла (1.txt и 2.txt). Тогда я начинаю applciation в первый раз. Примет ли GcsStreamingMessageSource эти файлы. Или, скажем, приложение было разбито по некоторым причинам. Затем я помещаю новый файл в корзину и запускаю приложение снова.

  3. Есть ли какие-нибудь возможности восстановления? скажем, приложение по какой-то причине зависло при обработке файла. Будет ли оно доставлено?

PS

На данный момент мы используем уведомления корзины, которые отправляются в pubsub. И приложение слушает PubSub topi c и загружает файл на основе заголовка уведомлений. Это более надежный способ?

...