spring kafka 메시지 동기 화 전송,비동기 전송,비동기 반전 및 파 티 션 경로 전송

10999 단어 kafka
spring 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 는 서로 다른 파 티 션 으로 가 는 매개 변수 입 니 다.
자,오늘 발 표 된 내용 은 여기까지 입 니 다.,전재 환영 합 니 다!!!

좋은 웹페이지 즐겨찾기