Nikita Shmakov bio photo

Nikita Shmakov

Software Engineer

Twitter Facebook Google+ LinkedIn Github Last.fm Coursera

Java Persistent Job Queue

Недавно закодил вот такую штуку: JPJQ. Расшифровывается как Java Persistent Job Queue. Библиотека сохраняет на диск асинхронные задачи, чтобы в случае перезагрузки приложения не потерять данные.

Реализовано все довольно просто - в потоке, который добавляет новую задачу, сериализуем её, пишем на диск и кидаем в джавовый Executor. Тот в свою очередь, запускает задачу и перемещает её в нужные папки, соответствующие её жизненному циклу. Поддерживаются различные виды задач (обычные, с повторными попытками запуска после ошибок, с задержками перед новыми попытками). Можно создавать сборщики мусора - треды, которые удаляют старые выполненные и зафейленные задачи.

Примеры кода, тесты производительности и остальную доку (включая код ;)), можно посмотреть тут.

На написание вдохновила наша внутренняя яндексовая разработка, которая используется в Диске. С помощью этой технологии мы запускаем большие задачи, которые можно сделать асинхронно (генерация превью, например), но она узкоспециализированная.

Разрабатывал я всё по TDD (потому что самой главной целью была практика написания хорошего кода ;)). Конечно, нет предела совершенству и, я думаю, многие найдут довольно много косячков в коде, но все равно код получился довольно хороший, чистый. Во время разработки познакомился с несколькими отличными сервисами. Во-первых, Travis. Это онлайн Continuous Integration, бесплатный для опен сорс проектов. Не понимаю, как я раньше без него жил :). Во-вторых, Bintray - онлайн репозиторий для Maven, Debian и RPM пакетов. Собственно, бинарники JPJQ доступны на Bintray :).

Думаю, для того, чтобы заюзать технологию в бою, придется ещё доделать несколько вещей (в issues на гитхабе есть несколько маст хэв фич). Пользуйтесь, заводите issues, делайте pull request’ы, пишите!


comments powered by Disqus