栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Kafka事务消息-整合SpringBoot

Kafka事务消息-整合SpringBoot

Kafka 从 0.11 版本开始引入了事务支持

        事务可以保证对多个分区写入操作的原子性
        操作的原子性是指多个操作要么全部成功,要么全部失败,不存在部分成功、部分失败的可能

        关于多条消息发送需要原子性的事务操作,需要配置spring.kafka.producer.transaction-id-prefix来开启事务(否则即使抛出异常消息还是会被发出去),但需要注意的是,如果开启事务,那么之后就必须使用事务方式kafkaTemplate.executeInTransaction(声明式事务)或@Transactional(注解事务),否则会报错。

增加配置:

spring.kafka.producer.transaction-id-prefix = wnn-tran-

注解方式的事务:

    @GetMapping("/api/v1/tran1")
    @Transactional(rollbackFor = RuntimeException.class)
    public void sendMessage2(int num){

        kafkaTemplate.send(TOPIC_NAME,"这个是事务消息 1 i="+num);

        if(num == 0){
            throw new RuntimeException();
        }
        kafkaTemplate.send(TOPIC_NAME,"这个是事务消息 2 i="+num);

    }

 http://localhost:8080/api/v1/tran1?num=0

当num输入0时,报异常。事务消息一条都不会发送。

 

声明式事务:

    
    @GetMapping("/api/v1/tran2")
    public void sendMessage3( int num){

        kafkaTemplate.executeInTransaction(new KafkaOperations.OperationsCallback() {
            @Override
            public Object doInOperations(KafkaOperations kafkaOperations) {

                kafkaOperations.send(TOPIC_NAME,"这个是事务消息 1 i="+num);

                if(num == 0){
                    throw new RuntimeException();
                }
                kafkaOperations.send(TOPIC_NAME,"这个是事务消息 2 i="+num);
                return true;
            }
        });
    }

http://localhost:8080/api/v1/tran2?num=0

当num输入0时,报异常。事务消息一条都不会发送。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/696326.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号