SpringBoot整合Kafka(4)

本文介绍了SpringBoot如何整合Kafka,包括Kafka事务的配置,@Transactional注解和executeInTransaction方法的使用,消息批量消费的实现,监听特定分区的策略,以及消息头和消息体的注解获取方式。此外,还详细讲解了Kafka的Ack机制在确认消费中的应用。
摘要由CSDN通过智能技术生成

1. Kafka事务配置

1.1 @Transactional注解方式

配置KafkaTransactionManager,配置producerFactory并开启事务功能

    //根据senderProps填写的参数创建生产者工厂
    @Bean
    public ProducerFactory<Integer, String> producerFactory() {
   
        DefaultKafkaProducerFactory defaultKafkaProducerFactory = new DefaultKafkaProducerFactory<>(senderProps());
        defaultKafkaProducerFactory.transactionCapable();
        defaultKafkaProducerFactory.setTransactionIdPrefix("tran-");
        return defaultKafkaProducerFactory;
    }

    @Bean
    public KafkaTransactionManager transactionManager(ProducerFactory producerFactory) {
   
        KafkaTransactionManager manager = new KafkaTransactionManager(producerFactory);
        return manager;
    }
    @ResponseBody
    @RequestMapping(value = "sendMsg")
    @Transactional
    public void sendMsg() throws InterruptedException, ExecutionException {
   

        kafkaTemplate.setProducerListener(kafkaSendResultHandler);
        kafkaTemplate.send("topic.quick.tran", "test transactional annotation");
        throw new RuntimeException("fail");
    }

在这里插入图片描述

1.2 使用executeInTransaction方法

    @ResponseBody
    @RequestMapping(value = "msg1")
    @Transactional
    public void msg1() throws InterruptedException, ExecutionException {
   
        kafkaTemplate.executeInTransaction(new KafkaOperations.OperationsCallback() {
   
            @Override
            public Object doInOperations(KafkaOperations kafkaOperations) {
   
                kafkaOperations.send("topic.quick.tran", "test executeInTransaction");
                throw new RuntimeException("msg1 fail");
            }
        });
    }

在这里插入图片描述

2. 消息批量消费

2.1 批处理监听器BatchListener

配置KafkaListener的containerFactory属性

package zhw.example.zhw.kafka;

import org.apache.kafka.clients.admin.NewTopic;
import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.common.serialization.IntegerDeserializer;
import org.apache.kafka.common.serialization.StringDeserializer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory;
import org.springframework.kafka.core.DefaultKafkaConsumerFactory;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Component
public class BatchListener {
   
    private static final Logger log= LoggerFactory.getLogger(BatchListener.class);

    private Map<String, Object> consumerProps(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值