├── settings.gradle ├── .gitignore ├── gradle.properties └── src └── main ├── java └── com │ └── zufar │ └── pulse │ ├── PulseApplication.java │ └── KafkaConsumerService.java └── resources └── application.yml /settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'Pulse' 2 | 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .gradle 2 | build 3 | out 4 | *.iml 5 | .idea 6 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | springBootVersion=3.4.4 2 | dependencyManagementVersion=1.1.0 3 | springKafkaVersion=3.3.4 4 | lombokVersion=1.18.38 5 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | --------------------------------------------------------------------------------