├── .gitignore ├── build.gradle ├── gradle.properties ├── settings.gradle └── src └── main ├── java └── com │ └── zufar │ └── pulse │ ├── KafkaConsumerService.java │ └── PulseApplication.java └── resources └── application.yml /.gitignore: -------------------------------------------------------------------------------- 1 | .gradle 2 | build 3 | out 4 | *.iml 5 | .idea 6 | -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | // Используем версии, определённые в gradle.properties 3 | id 'org.springframework.boot' version "${springBootVersion}" 4 | id 'io.spring.dependency-management' version "${dependencyManagementVersion}" 5 | id 'java' 6 | } 7 | 8 | group = 'com.zufar' 9 | version = '0.0.1-SNAPSHOT' 10 | sourceCompatibility = '17' // Обновлено до Java 17, обязательная версия для Spring Boot 3 11 | 12 | repositories { 13 | mavenCentral() 14 | } 15 | 16 | dependencies { 17 | // --------------------------- 18 | // Spring Boot Starters 19 | // --------------------------- 20 | implementation "org.springframework.boot:spring-boot-starter" 21 | 22 | // --------------------------- 23 | // Kafka Dependencies 24 | // --------------------------- 25 | implementation "org.springframework.kafka:spring-kafka:${springKafkaVersion}" 26 | 27 | // --------------------------- 28 | // Lombok Dependencies 29 | // --------------------------- 30 | compileOnly "org.projectlombok:lombok:${lombokVersion}" 31 | annotationProcessor "org.projectlombok:lombok:${lombokVersion}" 32 | 33 | // --------------------------- 34 | // Testing Dependencies 35 | // --------------------------- 36 | testImplementation "org.springframework.boot:spring-boot-starter-test" 37 | } 38 | 39 | tasks.named('test') { 40 | useJUnitPlatform() 41 | } 42 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | springBootVersion=3.4.4 2 | dependencyManagementVersion=1.1.0 3 | springKafkaVersion=3.3.4 4 | lombokVersion=1.18.38 5 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'Pulse' 2 | 3 | -------------------------------------------------------------------------------- /src/main/java/com/zufar/pulse/KafkaConsumerService.java: -------------------------------------------------------------------------------- 1 | package com.zufar.pulse; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.springframework.kafka.annotation.KafkaListener; 5 | import org.springframework.stereotype.Service; 6 | 7 | @Slf4j 8 | @Service 9 | public class KafkaConsumerService { 10 | 11 | /** 12 | * Метод для обработки входящих сообщений из Kafka. 13 | * Название топика и идентификатор группы берутся из конфигурационного файла (application.yml). 14 | * 15 | * @param message полученное сообщение 16 | */ 17 | @KafkaListener(topics = "${kafka.topic}", groupId = "${spring.kafka.consumer.group-id}") 18 | public void consumeMessage(String message) { 19 | try { 20 | log.info("Получено сообщение: {}", message); 21 | // Здесь можно добавить дополнительную логику обработки, например, парсинг JSON и сохранение метрик 22 | } catch (Exception e) { 23 | log.error("Ошибка при обработке сообщения: {}", message, e); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/com/zufar/pulse/PulseApplication.java: -------------------------------------------------------------------------------- 1 | package com.zufar.pulse; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class PulseApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(PulseApplication.class, args); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | port: ${APP_PORT} 2 | 3 | spring: 4 | kafka: 5 | bootstrap-servers: ${KAFKA_BOOTSTRAP_SERVERS} 6 | consumer: 7 | group-id: ${KAFKA_CONSUMER_GROUP} 8 | key-deserializer: org.apache.kafka.common.serialization.StringDeserializer 9 | value-deserializer: org.apache.kafka.common.serialization.StringDeserializer 10 | auto-offset-reset: earliest 11 | properties: 12 | security.protocol: SASL_SSL 13 | sasl.jaas.config: "org.apache.kafka.common.security.plain.PlainLoginModule required username='${KAFKA_API_KEY}' password='${KAFKA_API_SECRET}';" 14 | sasl.mechanism: PLAIN 15 | client.dns.lookup: use_all_dns_ips 16 | 17 | kafka: 18 | topic: ${KAFKA_TOPIC} 19 | --------------------------------------------------------------------------------