spring kafka 메시지 동기 화 전송,비동기 전송,비동기 반전 및 파 티 션 경로 전송
10999 단어 kafka
동시 발송
비동기 전송
비동기 전송 실패 반전
구역 별 루트 발송우 리 는 spring kafka 를 사용 하여 메 시 지 를 보 낼 때 send 방법 을 호출 하여 send 방법 을 입력 하 는 것 을 발 견 했 습 니 다.다음은 spring kafka 동기 화/비동기 로 메 시 지 를 보 내 고 비동기 리 셋 을 받 는 방법 을 소개 합 니 다.
동시 발송
가장 간단 한 동기 화 전송 방식 은 다음 과 같 습 니 다.
public class KafkaServer {
@Autowired
private KafkaTemplate kafkaTemplate;
public void send(){
try {
kafkaTemplate.send("topic","111111111").get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
여기 서 send()방법 은 먼저 Future 대상 을 되 돌려 준 다음 Future 대상 의 get()방법 으로 kafka 응답 을 기다 리 고 있 습 니 다.서버 가 오 류 를 되 돌려 주면 get()방법 에 이상 이 발생 합 니 다.오류 가 발생 하지 않 았 다 면,메 시 지 를 가 져 올 수 있 는 RecordMetadata 대상 을 얻 었 을 것 입 니 다.동기 화 전송 은 kafka 서버 의 응답 을 기다 리 는 것 이 상대 적 으로 낮 습 니 다.
비동기 전송
비동기 전송 방식 이 더 간단 합 니 다.동기 화 된 get()방법 만 제거 하면 됩 니 다.방식 은 다음 과 같 습 니 다.
public class KafkaServer {
@Autowired
private KafkaTemplate kafkaTemplate;
public void send(){
kafkaTemplate.send("test","111111111");
}
}
비동기 적 으로 보 내 는 것 이 동기 적 으로 보 내 는 것 보다 더 많은 메 시 지 를 처리 하 는 데 걸 리 는 시간 이 적 습 니 다.대부분의 경우 응답 을 기다 릴 필요 가 없 기 때문에 대부분의 경우 비동기 적 으로 보 냅 니 다.그러나 메 시 지 를 보 내 는 데 실 패 했 을 때 우 리 는 정확하게 처리 할 수 없 기 때문에 비동기 적 으로 메 시 지 를 보 내 는 데 실패 한 반전 이 필요 합 니 다.
비동기 전송 실패 리 셋
직접 코드 올 리 기:
@Component
public class KafkaSendResultHandler implements ProducerListener {
private static final Logger log = LoggerFactory.getLogger(KafkaSendResultHandler.class);
@Override
public void onSuccess(ProducerRecord producerRecord,RecordMetadata recordMetadata) {
log.info("Message send success : " + producerRecord.toString());
}
@Override
public void onError(ProducerRecord producerRecord, Exception exception) {
log.info("Message send error : " + producerRecord.toString());
}
}
@Service
public class KafkaServer {
@Autowired
private KafkaTemplate kafkaTemplate;
@Autowired
private KafkaSendResultHandler producerListener;
public void send(){
kafkaTemplate.setProducerListener(producerListener);
kafkaTemplate.send("topic","11111");
}
}
여기 서 우 리 는 ProducerListener 인터페이스 에서 onSuccess()와 onError 방법 을 다시 쓴 다음 에 kafkaServer 에 kafkaTemplate.set ProducerListener(producer Listener)를 추 가 했 습 니 다.리 턴 클래스 에서 우 리 는 업무 처리 에 따라 실패 한 메 시 지 를 보 낼 수 있 습 니 다.그러면 우 리 는 발송 실패 문 제 를 해결 하 는 데 신경 을 썼 습 니 다.다음은 경로 키 를 누 르 면 해당 구역 에 메 시 지 를 보 내 는 방법 을 보 겠 습 니 다.
파 티 션 경로 전송
우리 의 파 티 션 수가 여러 개 일 때 데이터 순서 가 엄격 할 때 우 리 는 같은 데 이 터 를 같은 파 티 션 에 보 낼 수 있 도록 해 야 합 니 다.이러한 상황 에 대해 spring kafka 는 해당 하 는 전송 인 터 페 이 스 를 제공 합 니 다.다음은 코드 입 니 다.
@Service
public class KafkaServer {
@Autowired
private KafkaTemplate kafkaTemplate;
public void send(){
// key,
String routeKey = "";
kafkaTemplate.send(new ProducerRecord("topic",routeKey, "111"));
}
}
여기 서 저 희 는 send()방법 을 직접 호출 하여 ProducerRecord 대상 에 들 어 갑 니 다.그 중에서 routeKey 는 서로 다른 파 티 션 으로 가 는 매개 변수 입 니 다.
자,오늘 발 표 된 내용 은 여기까지 입 니 다.,전재 환영 합 니 다!!!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Spring Cloud를 사용한 기능적 Kafka - 1부지금까지 찾을 수 없었던 Spring Cloud Kafka의 작업 데모를 만들기 위해 이 기사를 정리했습니다. Confluent 스키마 레지스트리 7.1.0 이 기사는 먼저 Spring Cloud Stream을 사용...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.