Статьи

Загрузчик изображений от Apache Camel

 

Прямая трансляция изображения # Олимпиады

(Приложение было улучшено и переехал в www.livephotostream.com читать о движении здесь )

Это очень короткое сообщение об очень простом приложение пути назад во время лондонской Олимпиады 2012 года и на основе примеров Apache Camel, Я создал приложение, которое отображает изображения Twitter, связанные с Олимпийскими играми в режиме реального времени. Он прослушивает твиты с изображениями, отфильтровывает дубликаты и отправляет изображения в браузер с помощью веб-сокетов каждые 5 секунд. Посмотреть
живут работающие на амазонка микро инстанции или проверить его из
моего GitHub счета.

Это сквозное push-приложение: как только пользователь отправляет изображение в твиттер, твиттер передает его в верблюжье приложение, а затем верблюжье приложение передает изображение всем клиентам. Он построен с использованием только «
бесплатных вещей »: бесплатный потоковый API Twitter, платформа Apache Camel, бесплатный микроэкземпляр Amazon, и все это делается в мое свободное время. Вот суть:

public void configure() throws Exception {

    from("twitter://streaming/filter?type=event&keywords=" + searchTerm)

            .to("log:tweetStream?level=INFO&groupInterval=60000&groupDelay=60000&groupActiveOnly=false")

            .process(new ImageExtractor())

            .process(new Statistics())

            .filter(body().isInstanceOf(Tweet.class))

            .idempotentConsumer(header(UNIQUE_IMAGE_URL), MemoryIdempotentRepository.memoryIdempotentRepository(10000))

            .to("log:imageStream?level=INFO&groupInterval=60000&groupDelay=60000&groupActiveOnly=false")

            .throttle(1).timePeriodMillis(5000).asyncDelayed().callerRunsWhenRejected(false)

            .marshal().json(JsonLibrary.Jackson)

            .to("websocket:camelympics?sendToAll=true");
}

Построчное объяснение

Twitter отправляет в приложение твиты, содержащие теги #Olympics и # London2012:


from («twitter: // streaming / filter? type = event & Keywords =» + searchTerm)

Журнал статистической информации о количестве сообщений каждую минуту. Не видны пользователи:


.to ( «Журнал: tweetStream уровень = INFO & groupInterval = 60000 & groupDelay = 60000 & groupActiveOnly = ложь?»)

Извлечение изображений из твитов, которые имеют медиа, связанные с:


.process (новый ImageExtractor ())

Введите текущее количество твитов и изображений в сообщении:


.process (новая статистика ())

Отфильтруйте все твиты, которые не содержат изображений:


.filter (корпус (). isInstanceOf (Tweet.class))

Отфильтруйте дублированные изображения, идентифицированные по их URL:


.idempotentConsumer (заголовок (UNIQUE_IMAGE_URL), MemoryIdempotentRepository.memoryIdempotentRepository (10000))

Войдите снова, сообщения, которые достигли этого маршрута:


.to ( «Журнал: ImageStream уровень = INFO & groupInterval = 60000 & groupDelay = 60000 & groupActiveOnly = ложь»)

Пусть изображения идут с разницей в 5 секунд, чтобы пользователь мог наслаждаться ими. Также важно — не блокируйте слушателя в твиттере с помощью
callerRunsWhenRejected, если буфер изображения заполняется, Twitter заблокирует вас:


.throttle (1) .timePeriodMillis (5000) .asyncDelayed (). callerRunsWhenRejected (ложь)

Сериализация в JSON:


.marshal (). JSON (JsonLibrary.Jackson)

Нажмите это пользователям:


.то ( «WebSocket: camelympics sendToAll = истина»);

Приложение может быть запущено также локально и позволяет фильтровать изображения не только для Олимпийских игр, но и для любых ключевых слов, передаваемых в качестве аргумента. Не забывайте использовать свои собственные жетоны клятвы в Твиттере при локальном использовании.

Наслаждайтесь Олимпиадой.