Приложение для отслеживания обновлений контента по ссылкам (GitHub и StackOverflow). При появлении новых событий отправляется уведомление в Telegram.
Проект написан на Java 21
с использованием Spring Boot 3
.
Проект состоит из 2-х приложений:
- Bot
- Scrapper
Для работы требуется БД PostgreSQL
. Присутствует опциональная зависимость на Kafka
.
Java 21
Spring Boot 3
- Взаимодействие сервисов -
WebClient
HttpInterface
- БД -
PostgreSQL
- Миграции -
Liquibase
- Очередь сообщений -
Kafka
- Взаимодействие с БД -
JDBC
(через JdbcClient) /jOOQ
/JPA
Docker
- Тесты -
JUnit 5
Mockito
WireMock
TestContainers
- Метрики -
Prometheus
Grafana
Список команд бота доступен через вкладку Меню в диалоге с ботом:
/help
- вывести список команд/start
- регистрация пользователя/end
- удаление пользователя/track <ссылка>
- начать отслеживать ссылку/untrack <ссылка>
- прекратить отслеживать ссылку/list
- вывести список отслеживаемых ссылок
- Клонировать репозиторий
- Конфигурационные файлы, в которых можно изменить модель Retry (fixed, linear, exponential), взаимодействие с БД (jdbc, jooq, jpa), а также использование очереди (true/false):
- Собрать проект командой
mvn package -DskipTests
(ввести команду можно через терминал, открывающийся двойным нажатием Ctrl в IntelliJ IDEA) - Поднять
PostgreSQL
и накатить миграции (можно выполнить при помощи командыdocker compose up -d liquibase-migrations
) - Опционально поднять
Kafka
при помощиdocker compose up -d kafka1
- Опционально поднять
Grafana
при помощиdocker compose up -d grafana
- Запустить приложение Scrapper, затем Bot
Сервисы собраны в легковесные Docker-образы,
которые можно подтянуть с GitHub Packages.
Для ручной сборки образов необходимо предварительно собрать проект командой mvn package -DskipTests
.
- Скопировать или скачать compose.yml
- Скачать конфигурационные файлы миграции и prometheus или запустить
docker compose run -d --rm files
- Указать в compose.yml TELEGRAM_API_KEY для bot
- Выполнить
docker compose up -d bot
- Для выключения приложения
docker compose down
- Swagger UI
- Bot localhost:8090/swagger-ui
- Scrapper localhost:8080/swagger-ui
- Метрики (доступны
info
health
metrics
)- Bot localhost:8091
- Scrapper localhost:8081
- Prometheus localhost:9090 (внутри Grafana http://prometheus:9090)
- Grafana localhost:3000
- Username: admin
- Password: admin