spring-kafka-provider.xml配置:
<?xmlのバージョン= "1.0"エンコード= "UTF-8"> <豆のxmlns = "http://www.springframework.org/schema/beans" のxmlns:XSI = "http://www.w3.org / 2001 / XMLスキーマ・インスタンス"の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を"> <コンストラクタ、引数> <マップ> <エントリキー= "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" /> </ MAP> </ constructor-引数> </豆> <! -创建kafkatemplate需要使用的producerfactory豆- > <豆ID = "producerFactory" クラス = "org.springframework.kafka.core.DefaultKafkaProducerFactory"> <コンストラクタ、引数> <refの豆= "producerProperties" /> </コンストラクタ、引数> </豆> <!- > - kafkatemplate豆、使用中、これだけ豆を注入する必要がある、あなたはテンプレートメソッドを使用してメッセージを送信することができます作成 の<bean上記ID =「kafkaTemplate」クラスを = "org.springframework.kafka.core.KafkaTemplate"> <コンストラクタ引数-REF = "producerFactory" /> <コンストラクタ、引数名= "自動フラッシュ"値= "TRUE" /> <プロパティ名= "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コンテキスト= 新しい ClassPathXmlApplicationContext( "/バネカフカ-provider.xmlの" )。 @SuppressWarnings( "未チェック" ) パブリック 静的 <K、T> ボイドのsendMessage(文字列トピック、整数パーティション、ロングタイムスタンプ、Kキー、Tデータ){ KafkaTemplate <K、T> kafkaTemplate =(KafkaTemplate <K、T>)CONTEXT .getBean( "kafkaTemplate" )。 ListenableFuture <SendResult <K、T >> listenableFuture = NULL ; もし(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のEX){ スロー 新しいのRuntimeException(EX)を、 } }。 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( "失敗" )。 //サービスロジックは失敗 スロー 新しい新しいのAのRuntimeException(EX)を; } }; listenableFuture.addCallback(successCallback、failureCallback)。