SpringBoot整合Kafka与事务使用

一,创建工程项目

第一步,填写项目信息

SpringBoot整合Kafka与事务使用_第1张图片

第二步

SpringBoot整合Kafka与事务使用_第2张图片

项目结构

SpringBoot整合Kafka与事务使用_第3张图片

 

二、项目的代码

2.1 给出application.properties的代码

server.port=8081
logging.level.root=INFO
# 生产者
spring.kafka.producer.bootstrap-servers=192.168.0.183:9092
# 消费者
spring.kafka.consumer.bootstrap-servers=192.168.0.183:9092
# 事务支持
spring.kafka.producer.transaction-id-prefix=kafka_tx.

2.2 给出pom.xml代码

注意这里的kafka依赖版本



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.3.2.RELEASE
         
    
    cn.demo.kafka
    demo-kafka
    0.0.1-SNAPSHOT
    demo-kafka
    Demo project for Spring Boot

    
        1.8
    

    
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
            
                
                    org.junit.vintage
                    junit-vintage-engine
                
            
        

        
            org.springframework.kafka
            spring-kafka
            2.4.3.RELEASE
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    


 

2.3 给出KafkaController的代码

/**
 * @program: test1-kafka
 * @description: kafka事务的使用
 * @author: WEN
 * @create: 2020-08-04
 **/
@RestController
@RequestMapping
public class KafkaController {
    private static final Logger logger = LoggerFactory.getLogger(KafkaController.class);

    @Autowired
    private KafkaTemplate template;
    private static final String topic = "xiaomo";

    @RequestMapping("index")
    public String index(){
        return "hello,kafka!";
    }

    /**     * 发送消息    
     */
    @GetMapping("/send/{input}")
    @Transactional(rollbackFor = RuntimeException.class)
    public String sendToKafka(@PathVariable String input) {

        //事务的支持
        template.send(topic,input);
        if ("error".equals(input)){
            throw new RuntimeException("this is a error!!!!!!");
        }
        template.send(topic,input+" mmmmmm");
        return "send success!"+input;
    }

    /**     * 接收消息     */
    @KafkaListener(id = "", topics = topic, groupId = "group.demo")
    public void listener(String input) {
        logger.info("input value:{}", input);
    }


}

三、项目启动测试

3.1 测试index能否正常显示

SpringBoot整合Kafka与事务使用_第4张图片

3.2 测试生产者跟消费者

首先输入一个不是error的字符串

SpringBoot整合Kafka与事务使用_第5张图片

查看控制台打印

SpringBoot整合Kafka与事务使用_第6张图片

可以看到有两条消息,消费者接收到,并且打印出来了

SpringBoot整合Kafka与事务使用_第7张图片

可以看一下虚拟机的消费端

SpringBoot整合Kafka与事务使用_第8张图片

3.3 测试error

可以看到页面报500,证明抛出了异常

SpringBoot整合Kafka与事务使用_第9张图片

正常的话,此时应该只有一条消息被发送了

去控制台看一下

发现没有打印

是因为加了事务的原因,进行了回滚,就是一个不成功,所有都没有发送了

 

你可能感兴趣的:(SpringBoot整合Kafka与事务使用)