봄 集成 카프카 생산 (KafkaTemplate)

 

spring-kafka-provider.xml 배치 :
<XML 버전 = "1.0" "UTF-8"인코딩 =?> 
<콩의 xmlns = "http://www.springframework.org/schema/beans" 
       에 xmlns :이 xsi = "http://www.w3.org / 2001 / 된 XMLSchema 인스턴스 "XMLNS : 문맥 ="http://www.springframework.org/schema/context " 
       XSI :의 schemaLocation ="http://www.springframework.org/schema/beans 
         HTTP : // WWW. springframework.org/schema/beans/spring-beans-4.0.xsd 
         HTTP : // www.springframework.org/schema/context 
         HTTP : // www.springframework.org/schema/context/spring-context.xsd "> 
    < 배경 : 속성 - 자리 위치 = "클래스 경로 * kafka.properties"/>  
    <!- 매개 변수의 생산자의 정의 ->
    <콩 ID = "producerProperties" 클래스= "java.util.HashMap에"> 
        <생성자 ARG> 
            <>지도 
                <입력 키 = "bootstrap.servers"값 = "$ {bootstrap.servers}"/> 
                <키 엔트리 = "group.id"값 = " $ {group.id} "/> 
                <키 엔트리 ="재시도 "값 ="$ {재시} "/> 
                <키 엔트리 ="batch.size "값 ="$ {batch.size} "/> 
                <입력 키 = "linger.ms"값 = "$ {linger.ms}"/> 
                <키 엔트리 = "buffer.memory"값 = "$ {buffer.memory}"/> 
                <키 엔트리 = "ACK들"값 = "$ {의 ACK} "/>
                <입력 키 = "key.serializer"  = "org.apache.kafka.common.serialization.StringSerializer"/> 
                <키 엔트리 = "value.serializer"  = "org.apache.kafka.common.serialization.StringSerializer"/> 
            </지도> 
        </ constructor- 인수> 
    </ 빈> 

    <! -创建kafkatemplate需要使用的producerfactory 콩 -> 
    <콩 ID = "producerFactory" 클래스 = "org.springframework.kafka.core.DefaultKafkaProducerFactory"> 
        <생성자 인수> 
            <심판 콩 = "producerProperties"/> 
        </ 생성자, 인수> 
    </ 빈> 
    <!-> - 사용 만이 빈을 주입 할 필요가있을 때, 당신은 템플릿 메소드를 사용하여 메시지를 보낼 수 kafkatemplate 콩 만들기 
    <언급 된 ID = "kafkaTemplate"위의 빈 클래스를
          
= "org.springframework.kafka.core.KafkaTemplate"> 
        <생성자 ARG REF = "producerFactory를"/> 
        <인수 생성자 이름 = "의 autoflush"값 = "참"/> 
        <속성 명 = "defaultTopic"값 = " JQ 테스트 "/> 
    </ 빈> 
</ 콩>

어디 $ {XXXX}이 kafka.properties 프로필에서 소개된다. 일부는 클러스터 링크 구성 속성.

 

수입 java.util.HashMap에;
수입 java.util.Map; 

수입 org.springframework.context.support.ClassPathXmlApplicationContext;
수입 org.springframework.kafka.core.KafkaTemplate;
수입 org.springframework.kafka.support.SendResult;
수입 org.springframework.util.concurrent.FailureCallback;
수입 org.springframework.util.concurrent.ListenableFuture;
수입 org.springframework.util.concurrent.SuccessCallback; 

수입 club.codeapes.common.date.DateUtil;
수입 net.sf.json.JSONObject; 

공공  클래스 KafkaSendMsgUtils {
     공공  정적 최종   ClassPathXmlApplicationContext의 CONTEXT = 새로운 ClassPathXmlApplicationContext ( "/ 스프링 카프카-provider.xml" ); 

    @SuppressWarnings ( "선택 해제" )
     공공  정적 <K, T> 무효 sendMessage 첨부 (문자열 항목, 정수 파티션, 롱 타임 스탬프, K 키, T 데이터) { 
        KafkaTemplate <K, T> kafkaTemplate = (KafkaTemplate <K, T>) CONTEXT .getBean ( "kafkaTemplate" ); 
        ListenableFuture <SendResult <K, T >> listenableFuture = ;
        경우 {(kafkaTemplate.getDefaultTopic는 (). (주제)와 동일) 
            listenableFuture =  kafkaTemplate.sendDefault (파티션, 타임 스탬프, 키 데이터); 
        } 다른 { 
            listenableFuture = kafkaTemplate.send (항목, 파티션, 타임 스탬프, 키 데이터); 
        } 
        // 发送成功回调 
        SuccessCallback <SendResult <K, T = >> successCallback 새로운 SuccessCallback <SendResult <K, T >> () { 
            @Override 
            공개  보이드 는 onSuccess (SendResult <K, T> 결과) {
                                에서 System.out.println ( "成功"); 
            } 
        }; 
        // 发送失败回调 
        FailureCallback failureCallback = 새로운 FailureCallback () {
            공공  무효 onFailure (Throwable를 예) {
                
                던져  새로운 RuntimeException을 (예를) 
            } 
        }; 
        listenableFuture.addCallback (successCallback, failureCallback); 
    } 
}

 

kafkaTemplate 보내기 다형성이 방법을 오버로드하고, 여러 가지 매개 변수를 필요에 따라 전송 파라미터를 호출 할 수있을 수 있습니다.

 

 

 

返回 值 是 : ListenableFuture <SendResult <K, T >> listenableFuture

 

우리는 다음 코드로 실패 또는 성공 후 상황을 처리 할 수 ​​있습니다 :

        // 전송을 성공적으로 콜백 
        successCallback <SendResult <K, T >> successCallback = 새로운 새로운 successCallback <SendResult <K, T >> () { 
            @Override 
            공공  무효 는 onSuccess (SendResult <K, T> 결과) {
                 // 성공적인 비즈니스 로직 
                시스템 .out.println ( "성공" ); 
            } 
        }; 
        // 실패 콜백 보내 
        failureCallback failureCallback = 새로운 새로운 failureCallback을 () { 
            @Override 
            공공  무효 onFailure (Throwable의 EX) { 
                에서 System.out.println ( "실패" );
                //서비스 로직이 실패 
                던져  새 새 ,의 RuntimeException의 (EX) 
            } 
        }; 
        listenableFuture.addCallback (successCallback, failureCallback을);

 

추천

출처www.cnblogs.com/chenmz1995/p/12350421.html