kafka-10--springboot集成kafka

Springboot 集成kafka
1.创建springboot项目并引入依赖
<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.5.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
    </dependencies>
2.编写配置文件
spring.kafka.bootstrap-servers=ip:9092

spring.kafka.producer.retries=5
spring.kafka.producer.acks=all
spring.kafka.producer.batch-size=16384
spring.kafka.producer.buffer-memory=33554432
#开启生产者的事务控制
spring.kafka.producer.transaction-id-prefix=transaction-id-
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.properties.enable.idempotence=true

spring.kafka.consumer.group-id=group1
spring.kafka.consumer.auto-offset-reset=earliest
spring.kafka.consumer.enable-auto-commit=true
spring.kafka.consumer.auto-commit-interval=100
spring.kafka.consumer.properties.isolation.level=read_committed
spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer
3. 创建消费者
@SpringBootApplication
public class KafkaSpringBootApplication {

    public static void main(String[] args) throws IOException {
        SpringApplication.run(KafkaSpringBootApplication.class,args);
        System.in.read();
    }

    @KafkaListeners(
            value = {
	               //监听topic
                   @KafkaListener(topics = {"topic01"})
            }
    )
    public void receive01(ConsumerRecord consumerRecord){
        System.out.println("topic01 record:"+consumerRecord);
    }


    @KafkaListeners(
            value = {
                    @KafkaListener(topics = {"topic02"})
            }
    )
    @SendTo("topic03")//将监听到的信息转发到topic3
    public String receive02(ConsumerRecord consumerRecord){
        return consumerRecord.value()+"\t"+"fufu zhen shuai ";
    }

    @KafkaListeners(
            value = {
                    @KafkaListener(topics = {"topic03"})
            }
    )
    public void receive03(ConsumerRecord consumerRecord){
        System.out.println("topic03 record:"+consumerRecord);
    }
}
4.springboot完成对事务的控制
@SpringBootTest(classes = KafkaSpringBootApplication.class)
@RunWith(SpringRunner.class)
public class KafkaSpringbootTest {

    @Autowired
    private KafkaTemplate kafkaTemplate;

    /**
     * 非事务下执行 这里会报错 说没开启事务
     */
    @Test
    public void testSend1(){
        kafkaTemplate.send(new ProducerRecord("topic01","key007","this is kafkatemplate send message"));
    }

    /**
     * 事务下执行
     */
    @Test
    public void testSend2(){
        kafkaTemplate.executeInTransaction(new KafkaOperations.OperationsCallback() {
            @Override
            public Object doInOperations(KafkaOperations kafkaOperations) {
                kafkaOperations.send(new ProducerRecord("topic01","key007-tran","this is kafkatemplate send message by tranceation"));
                return null;
            }
        });
    }
}
5.利用spring事务完成kafka的事务控制
@SpringBootTest(classes = KafkaSpringBootApplication.class)
@RunWith(SpringRunner.class)
public class MessageSenderTest {

    @Autowired
    private IMessageSender messageSender;

    @Test
    public void sendMessage(){
        messageSender.sendMessage("topic01","002-service","message send by service template");
    }

    @Test
    public void printInfo(){
        messageSender.printInfo("print info by which one service");
    }
}

public interface IMessageSender {
    public void sendMessage(String topic,String key,String message);

    void printInfo(String info);
}

@Service
@Transactional
public class MessageSender implements IMessageSender {

    @Autowired
    private KafkaTemplate kafkaTemplate;

    @Override
    public void sendMessage(String topic, String key, String message) {
        kafkaTemplate.send(new ProducerRecord(topic,key,message));
    }

    @Override
    public void printInfo(String info) {
        System.out.println("11111111111111111111"+info);
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值