当前位置: 首页 > article >正文

Kafka + SpringBoot集成

学习贴:参考https://blog.csdn.net/qq_20865839/article/details/133948989

简单SpringBoot整合:

依赖:

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

生产者


@RestController
public class kafkaProducer {
 
    @Autowired
    private KafkaTemplate<String, Object> kafkaTemplate;
    
    @GetMapping("/kafka/normal/{message}")
    public void sendNormalMessage(@PathVariable("message") String message) {
        kafkaTemplate.send("sb_topic", message);
    }

消费者:


@Component
public class KafkaConsumer {
 
    //监听消费
    @KafkaListener(topics = {"sb_topic"})
    public void onNormalMessage(ConsumerRecord<String, Object> record) {
        System.out.println("简单消费:" + record.topic() + "-" + record.partition() + "=" +
                record.value());
    }

生产者

带回调的生产者
kafkaTemplate提供了一个回调方法addCallback,我们可以在回调方法中监控消息是否发送成功 或 失败时做补偿处理

    /**
     * 回调的第二种写法
     * @param message
     */
    @GetMapping("/kafka/callbackTwo/{message}")
    public void sendCallbackTwoMessage(@PathVariable("message") String message) {
        kafkaTemplate.send("sb_topic", message).addCallback(new ListenableFutureCallback<SendResult<String, Object>>() {
            @Override
            public void onFailure(Throwable throwable) {
                System.out.println("发送消息失败2:"+throwable.getMessage());
            }
 
            @Override
            public void onSuccess(SendResult<String, Object> result) {
                System.out.println("发送消息成功2:" + result.getRecordMetadata().topic() + "-"
                        + result.getRecordMetadata().partition() + "-" + result.getRecordMetadata().offset());
            }
        });
    }

监听器

Kafka提供了ProducerListener 监听器来异步监听生产者消息是否发送成功,我们可以自定义一个kafkaTemplate添加ProducerListener,当消息发送失败我们可以拿到消息进行重试或者把失败消息记录到数据库定时重试。

注意:
当我们发送一条消息,既会走 ListenableFutureCallback 回调,也会走ProducerListener回调。


@Configuration
public class KafkaConfig {
 
    @Autowired
    ProducerFactory producerFactory;
 
    @Bean
    public KafkaTemplate<String, Object> kafkaTemplate() {
        KafkaTemplate<String, Object> kafkaTemplate = new KafkaTemplate<String, Object>(producerFactory);
        kafkaTemplate.setProducerListener(new ProducerListener<String, Object>() {
            @Override
            public void onSuccess(ProducerRecord<String, Object> producerRecord, RecordMetadata recordMetadata) {
                System.out.println("发送成功 " + producerRecord.toString());
            }
 
            @Override
            public void onSuccess(String topic, Integer partition, String key, Object value, RecordMetadata recordMetadata) {
                System.out.println("发送成功 topic = " + topic + " ; partion = " + partition + "; key = " + key + " ; value=" + value);
            }
 
            @Override
            public void onError(ProducerRecord<String, Object> producerRecord, Exception exception) {
                System.out.println("发送失败" + producerRecord.toString());
                System.out.println(exception.getMessage());
            }
 
            @Override
            public void onError(String topic, Integer partition, String key, Object value, Exception exception) {
                System.out.println("发送失败" + "topic = " + topic + " ; partion = " + partition + "; key = " + key + " ; value=" + value);
                System.out.println(exception.getMessage());
            }
        });
        return kafkaTemplate;
    }
}

http://www.kler.cn/a/427621.html

相关文章:

  • Flume source类型和使用案例(exec,spoodir,Taildir)
  • 【数字电路与逻辑设计】实验五 4人表决器
  • C#设计模式--适配器模式(Adapter Pattern)
  • WordPress XStore Elementor 前端与编辑器内容不同步的问题
  • 数据科学和机器学习中的多重共线性:隐藏的威胁及其解决方法
  • ASP.NET Core Web 项目的部署:选择 IIS 还是 Kestrel?
  • 【周易哲学】生辰八字入门讲解(七)
  • 【工具】音频文件格式转换工具
  • mongoDB 8.0 群集搭建和遇到的问题
  • OpenCV 图像基本操作
  • Oracle数据库使用dblink是时出现 ORA-12170:TNS:连接超时
  • 【Springboot3+vue3】从零到一搭建Springboot3+vue3前后端分离项目之后端环境搭建
  • 基于单片机的自限位电机正反转控制电路
  • 基于合成错误增强的标签精细化网络用于医学图像分割|文献速递-生成式模型与transformer在医学影像中的应用
  • 【Elasticsearch】Docker安装和基本概念
  • DevOps工程师成长路线图
  • 面试小札:线程池
  • 下载谷歌浏览器的官方离线安装包
  • 【论文解读】MD-VQA: Multi-Dimensional Quality Assessment for UGC Live Videos
  • TCP编程案例