Младший Java программист Всем привет, данная статья является, своего рода моей первой, но все же постараюсь максимально просто рассказать вам о том, как создать бота, прикрутив к нему все обещанные выше свистелки-тарахтелки. Статьи будут разделены на 2 части, первая часть - создание основного бота с отправкой логов (Kafka Producer) и записью их в БД, вторая часть - обработка всех логов (Kafka Consumer). Регистрация бота Создание Spring Boot проект, проще всего это сделать через Spring Initializr. (в качестве системы сборки будет использоваться Gradle) Kafka (для отслеживания топиков я использую Conductor) PostgreSQL (для комфортной работы я использую DBeaver) Прошу пишите в комментариях возникшие проблемы, на всякий случай - вот мой git и тг Первостепенно нужно настроить build.gradle со всеми зависимостями Далее сразу для работы Kafka опишем application.yml, в котором находятся настройки нашего kafka producer Теперь настройки application.properties Хорошо, после настроек нашего проекта, давайте обговорим его структуру: Пакеты: config - описание бинов и конфигурации проекта controller - обрабатывает запрос пользователя dto - хранит данные, а так же описывает модель таблицы БД exceptions - кастомный пакет обработчика ошибок repository - логика работа с БД service - основная бизнес логика проекта - Первым делом прописываем конфигурация бинов нашего приложения в пакете config, тут настройки инициализации TelegramBotsApi и ObjectMapper - Внутри нашего класса DbConfig, есть класс SpringDataJdbcProperties, который описывает настройки SpringDataJdbc - Создадим базовый класс для уменьшения дублирования кода инициализации бинов - После напишем утилитный класс для логирования  - Создаем простенький контроллер, для получения списка записей из БД - Создаем модель пользователя User, а так же его маппер UserMapper, который понадобиться для работы с БД и маппинга полей в таблице Их мы используем для обработки ошибок, которые могут произойти в процессе работы приложения, чтобы бот не сломался и продолжил свою работу. - BaseException - класс, который наследуется от RuntimeException, в конструкторе принимает 2 параметра - сообщение и тело ошибки - NotFoundException - класс, который вызывается, когда ответ не найден, наследуется от BaseException - DbException - класс, который обрабатывает ошибки связанные с БД, наследуется от RuntimeException - Создадим интерфейс, который описывает методы, для работы с записями в БД  - Теперь напишем класс, который реализует методы интерфейса - Далее у нас идет логика бота, тут все тривиально, в от наследованном onUpdateReceived методе от класса родителя TelegramLongPollingBot мы пишем поведение, которое происходит при обновлении чата с пользователем, подробнее об этом здесь, так же в методе обработки сообщений есть вызов нашего producer и запись данных в БД - BaseService - реализует базовые методы сервисов проекта - Класс UserService работает с нашим репозиторием IUserRepository и содержит в себе бизнес-логику работы с записями о событиях в БД - Класс Producer, как раз тот класс, который шлет сообщения в топик users, а так же здесь мы можем изменять формат самого сообщения и данные, которые он отправляет - Сначала проверим, запущена ли Kafka - После, запускаем Conductor и видим, что у нас работает брокер сообщений, после запуска нашего приложения, тут появится топик users, в который будут лететь сообщения отправленные нашим producer - Далее запускаем DBeaver и создаем 2 таблицы (log и user_table), вот схема создания таблиц:  - Запускаем проект, проверяем, что все настроено и корректно работает - Открываем телеграм и пробуем на вкус нашего "монстра-Франкенштейна" Пишем - /start  и начинаем тест ... Я в шоке, оно живое ! - Давайте посмотрим, что же нам написал Spring Boot в логах и записались ли данные в Kafka и БД ? - Как мы видим, сообщения отправленные Боту появились в БД - Открыв кондуктор, перейдите во вкладку topics, после нажимаем на наш топик users - Далее во вкладке нашего топика нажимаем на кнопку CONSUME DATA - В открывшемся окне, ставим такие же настройки (самая важная из них это Start From - указывает, с какого момента показывать сообщения в Kafka, наша настройка - показывает все сообщения, включая отправленные ранее) - Вот и все, теперь мы убедились, что сообщения благополучно прилетели в Kafka, записались в БД и не вызвали ошибок в приложении Ну что же, большое всем спасибо за время, потраченное на прочтение данной статьи, жду вас во второй части этого туториала, где мы используем Consumer Kafka, с помощью которого будем обрабатывать прилетающие сообщения. Java programmer