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을);