개요
이전포스팅에서 Windows 환경에 Kafka를 설치하고 cmd를 통해서 Zookeeper와 Kafka를 실행하고 producer로 메세지를 전송하고 consumer 메세지를 전달받는 테스트를 해보았습니다.
이번 포스팅에서는 Spring boot 환경에서 로컬환경에 설치된 Kafka를 이용해서 하나의 어플리케이션에서 producer 코드와 consumer 코드를 통해서 메세지를 Kafka로 전달하고 Kafka로 부터 메세지를 전송받게 해보겠습니다.
Kafka 적용
Spring에서 Kafka를 사용할 수 있게 build.gradle 파일에 dependency를 추가해줍니다.
implementation 'org.springframework.kafka:spring-kafka'
application.yml 파일에 Kafka 설정 정보를 작성해줍니다.
bootsrap-servers는 Kafka 서버의 정보를 입력해주면 되고 저는 로컬환경에서 9092포트(Kafka 서버 기본포트)에서 실행되고 있습니다. group-id는 동일한 topic에 대해 여러 consumer가 메시지를 구독하고 처리할 때 사용하는 식별자입니다. 만약 consumer가 여러종류라면 consumer마다 group-id를 유니크하게 식별되는 값을 넣어주시면 됩니다.
spring:
kafka:
bootstrap-servers: "localhost:9092"
consumer:
group-id: "group-syk531"
테스트 환경은 producer와 consumer가 동일 어플리케이션에 있어서 bootsrap-servers 를 Kafka 하위에 작성하였는데 producer와 consumer가 다른 어플리케이션에 있다면 producer와 consumer 정보를 분리해서 필요한 부분만 각각 작성할수도 있습니다.
spring:
kafka:
consumer:
bootstrap-servers: "localhost:9092"
group-id: "group-syk531"
producer:
bootstrap-servers: "localhost:9092"
consumer 소스는 아래와 같이 작성하면 됩니다.
@Service
public class InfTestService {
@KafkaListener(topics = "syk531", groupId = "group-syk531")
public void consume(String message) {
System.out.println("receive messsage : " + message);
}
}
@KafkaListener를 통해 consumer end point를 지정할수 있습니다.
application.yml에 설정한 consumer의 groupId와 메세지를 가져올 topics을 적어주시면 됩니다.
producer 소스는 아직 작성이 안되 있는 상태에서 cmd에서 메세지를 보내는것을 확인해보기 위해 Zookeeper, Kafka 서버가 실행되 있는 상태에서 kafka-console-producer.bat 를 통해 메세지를 보내면 Intellij 콘솔창에 consumer가 전달받은 메세지가 찍히는것을 볼 수 있습니다.
producer 코드는 아래와 같이 작성하며 됩니다.
@Autowired
private KafkaTemplate<String, String> kafkaTemplate;
@PostMapping("/kafkaSendMessage")
public void kafkaSendMessage(String message) {
System.out.println("send message : " + message);
kafkaTemplate.send("syk531", message);
}
KafkaTemplate 클래스를 통해 Kafka로 메세지를 전달할 수 있습니다.
send 함수의 첫번째 인자는 topic 이름, 두번째 인자는 전달할 메세지를 넣어주시면 됩니다.
producer 코드 작성 후 postman으로 호출을 해보면 producer 코드에서 보낼 메세지가 찍히고 consumer 코드에서 받은 메세지가 찍히는것을 확인할 수 있습니다.
참고자료
https://docs.spring.io/spring-boot/docs/current/reference/html/messaging.html#messaging.kafka
'개발 > Kafka' 카테고리의 다른 글
[Apache Kafka] 자주 사용하는 명령어 (0) | 2023.12.11 |
---|---|
[Apache Kafka] CMAK 설치 방법 (1) | 2023.12.11 |
[Apache Kafka] connect, connector (0) | 2023.12.10 |
[Apache Kafka] topic 삭제 방법 (0) | 2023.12.10 |
[Apache Kafka] 설치 및 실행 (0) | 2023.12.07 |