Open kwonslog opened 1 year ago
템플릿은 좀더 간편하게 메세지를 송신 하는 경우에 사용.
템플릿은 내부적으로 KafkaProducer을 사용.
동일한 메세지를 중복으로 송신하는 것을 방지하기 위해서는 KafkaProducer를 사용하는 것이 좋다.
중복 메시지를 걸러내기 위해 메시지 ID를 활용하는 방법이 있다
KafkaProducer 와 ProducerRecord 는 어떤 라이브러리에 포함되어 있습니까?
'org.apache.kafka:kafka-clients:2.8.0'
KafkaProducer 는 일반적으로 new 연산자를 사용하여 생성합니까?
직접 생성하는 것을 권장함.
ProducerRecord 는 일반적으로 new 연산자를 사용하여 생성합니까?
그렇다.
사용한 messageId가 중복인지 판단하는 코드는 어디에 작성해야 합니까?
유니크한 값(주문ID같은)을 메세지 id로 사용해서 전송하고, 메세지를 수신하는 측에서 메세지id의 중복여부를 체크해야함.
producer.close(); 코드는 반드시 호출해야 합니까? 그 이유는 무엇입니까?
메모리 누수나 리소스를 해제를 위해 사용하는 것을 권장한다.
KafkaProducer 에서 메세지가 송신이 성공하거나 실패 했는지 확인하는 방법은?
send 메소드 호출시 결과값을 처리할 Callback 객체를 인자로 넘긴다. 해당 객체의 onCompletion() 메서드에서는 RecordMetadata 객체와 Exception 객체를 결과값으로 받는다. Exception 객체가 null인 경우 메시지 송신이 성공했음을 의미.
spring webflux 프로젝트 생성
kafka 사용을 위한 라이브러리 설정
메세지 송신(프로듀서 구현)
import lombok.RequiredArgsConstructor; import org.apache.kafka.clients.producer.ProducerRecord; import org.springframework.beans.factory.annotation.Value; import org.springframework.kafka.core.KafkaTemplate; import org.springframework.kafka.support.SendResult; import org.springframework.stereotype.Component; import org.springframework.util.concurrent.ListenableFuture; import org.springframework.util.concurrent.ListenableFutureCallback;
@Component @RequiredArgsConstructor public class KafkaMessageProducer {
private final KafkaTemplate<String, String> kafkaTemplate;
@Value("${kafka.topic}") private String topic;
public void sendMessage(String message) { ProducerRecord<String, String> record = new ProducerRecord<>(topic, message);
} }
import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import reactor.core.publisher.Mono;
@RestController @RequiredArgsConstructor public class SendMessageController {
private final KafkaMessageProducer kafkaMessageProducer;
@GetMapping(path = "/sendMessage") public Mono sendMessage() {
kafkaMessageProducer.sendMessage("case1 sendMessage Test!");
} }
docker-compose up
docker exec -it test-kf kafka-console-consumer --topic test-topic --bootstrap-server localhost:9092
//C:\Windows\System32\drivers\etc\hosts 127.0.0.1 test-kafka
그리고 호출하는 코드를 추가한다.
작성한 소스코드