spring-kafka入門學習(五):spring-kafka事務

一、前言

spring-kafka提供了兩種事務的實現方式

1.使用SpringBoot的註解@Transactional

2.本地事務KafkaTemplate

二、@Transactional

修改生產者的配置,開啓事務支持

 @Bean
    public ProducerFactory<Integer, String> producerFactory() {
        DefaultKafkaProducerFactory<Integer, String> factory = new DefaultKafkaProducerFactory<>(producerConfigs());
        factory.setTransactionIdPrefix("trans-");//支持事務
        return factory;
    }
    @Bean
    KafkaTransactionManager kafkaTransactionManager() {
        return new KafkaTransactionManager(producerFactory());
    }

接口

    @RequestMapping(value = "test3")
    @Transactional
    public String test3() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        kafkaTemplate.send("topic_transaction_test", 0, "事務測試數據" + sdf.format(new Date()));
        kafkaTemplate.flush();
        throw new RuntimeException("a");
//        return "test";
    }

三、本地事務KafkaTemplate

修改生產者的配置,開啓事務支持(只設置這個就可以)

    @Bean
    public ProducerFactory<Integer, String> producerFactory() {
        DefaultKafkaProducerFactory<Integer, String> factory = new DefaultKafkaProducerFactory<>(producerConfigs());
        factory.setTransactionIdPrefix("trans-");//支持事務
        return factory;
    }

本地事務的使用

        kafkaTemplate.executeInTransaction(new KafkaOperations.OperationsCallback() {
            @Override
            public Object doInOperations(KafkaOperations kafkaOperations) {
                kafkaOperations.send("topic_transaction_test", 0, "事務測試數據" + sdf.format(new Date()));
                throw new RuntimeException("a");
//                return true;
            }
        });

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章