ばね集成カフカプロデューサ(KafkaTemplate)

 

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)。

 

おすすめ

転載: www.cnblogs.com/chenmz1995/p/12350421.html