15、Kafka ------ SpringBoot 整合 Kafka (自动配置类 KafkaAutoConfiguration 源代码剖析)

目录

  • SpringBoot 整合 Kafka 的自动配置及源代码剖析
    • Spring Boot 为 Kafka 提供的自动配置
    • KafkaAutoConfiguration Kafka自动配置类源码解析
      • 1、自动配置类:KafkaAutoConfiguration 注解解析
      • 2、自动配置类:KafkaAutoConfiguration 配置的 bean
        • 1、KafkaTemplate:消息生产者
        • 2、ProducerListener:消息生产者监听器
        • 3、ConsumerFactory:消息消费者工厂
        • 4、ProducerFactory:消息生产者工厂
        • 5、KafkaTransactionManager:局部事务管理器
        • 6、KafkaAdmin:封装了 Kafka 的管理API
      • 3、被导入的两个自动配置类:
        • 1、KafkaAnnotationDrivenConfiguration:
        • 2、KafkaStreamsAnnotationDrivenConfiguration:

SpringBoot 整合 Kafka 的自动配置及源代码剖析


Spring Boot 为 Kafka 提供的自动配置


Sping Boot 并没有为整合 Kafka 提供 Starter,而是通过 spring-kafka 项目的自动配置来提供支持。
(重要是有自动配置类,starter 也是搞传递依赖而已,通过添加starter,把依赖库加进来,关键就是要有自动配置类而已)

只要类加载路径下包含了 spring-kafka 依赖库,Spring Boot 会自动配置 KafkaAdmin 和 KafkaTemplate,

其中
KafkaAdmin 封装了 Kafka 的管理API。

KafkaTemplate 则提供了大量重载的 send()方法 用于发送消息。



KafkaAutoConfiguration Kafka自动配置类源码解析

先创建一个springboot项目,看 KafkaAutoConfiguration 源代码

在这里插入图片描述

演示时习惯删这些,可删可不删

在这里插入图片描述

这个就是 kafka 的自动配置类:KafkaAutoConfiguration

这个就是 springboot 给 kafka 提供的自动配置类

在这里插入图片描述



1、自动配置类:KafkaAutoConfiguration 注解解析

该类上有 @ConditionalOnClass(KafkaTemplate.class) 条件注解 ,要求有 KafkaTemplate 时该配置类才生效。
而 KafkaTemplate 类就位于 spring-kafka 项目中,因此这意味着只有当类加载路径下有 spring-kafka 项目时,自动配置才能生效。

在这里插入图片描述


属性处理类 : KafkaProperties

在这里插入图片描述


导入的这两个注解:

在这里插入图片描述



2、自动配置类:KafkaAutoConfiguration 配置的 bean


在 KafkaAutoConfiguration 自动配置类中,配置了如下Bean:

1、KafkaTemplate:消息生产者

KafkaTemplate: 只有当容器中没有 KafkaTemplate 时,自动配置才会生效

KafkaTemplate 主要是用来发送消息的,可以理解为是kafka的消息生产者
在这里插入图片描述


2、ProducerListener:消息生产者监听器

ProducerListener:
它是 Spring Boot 为消息生产者(KafkaTemplate)提供的一个监听器。
一般不需要管它,但如果你要在消息发送成功时、消息发送失败时,进行某些回调处理,你可以实现自己的 ProducerListener,该 Bean 中 onSuccess()方法 和 onError方法 就会对发送成功、发送失败进行回调处理。

在这里插入图片描述


回调处理的方法

在这里插入图片描述


无论消息发送成功还是失败,都会有这个 LoggingProducerListener 记录日志。

在这里插入图片描述


消息发送成功,啥也不干,消息发送失败,就会把消息发送失败的过程记录下来。

在这里插入图片描述


3、ConsumerFactory:消息消费者工厂

ConsumerFactory: 消息消费者工厂。一般不需要管它,它负责为消息消费者提供支撑。

在这里插入图片描述


4、ProducerFactory:消息生产者工厂

ProducerFactory: 消息生产者工厂。一般不需要管它,它负责为消息生产者提供支撑。

在这里插入图片描述


5、KafkaTransactionManager:局部事务管理器

KafkaTransactionManager: Kafka的局部事务管理器。
只有当spring.kafka.producer.transaction-id-prefix存在时,Spring Boot才会自动配置该事务管理器。
比如基于 Atomikos 开源框架的分布式事务。

在这里插入图片描述


6、KafkaAdmin:封装了 Kafka 的管理API

KafkaAdmin:(只有当容器中没有KafkaAdmin时,自动配置才会生效)

在这里插入图片描述



3、被导入的两个自动配置类:

在这里插入图片描述


1、KafkaAnnotationDrivenConfiguration:

它的作用是根据 @KafkaListener 注解来启用消息监听器

KafkaAnnotationDrivenConfiguration 这个配置类还配置了监听器的容器工厂(ConcurrentKafkaListenerContainerFactory)及它的配置器(Configurer)。


ConcurrentKafkaListenerContainerFactory:
在这里插入图片描述


Configurer:就是指这个

在这里插入图片描述



2、KafkaStreamsAnnotationDrivenConfiguration:

主要是为 Kafka 流API 来提供支撑的自动配置类。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/356845.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024 年, Web 前端开发趋势

希腊哲学家赫拉克利特认为,变化是生命中唯一不变的东西。这句话适用于我们的个人生活、行业和职业领域。 尤其是前端开发领域,新技术、开发趋势、库和框架不断涌现,变化并不陌生。最近发生的一些事件正在改变开发人员构建网站和 Web 应用的方…

mysql中的锁

按照锁的粒度分 表锁 表级锁,增删改操作时,会给正张表加锁; myisam支持表级锁,innodb中默认没有使用表锁, 特点:虽然加锁的开销小,但是并发性能低。 间隙锁 满足某些条件,获取…

Selenium教程11:模拟账号密码,自动登入qq空间

Python爬虫教程30:Selenium网页元素,定位的8种方法! Selenium自动化教程02:浏览器options配置及常用的操作方法 Selenium自动化教程03:延时等待的3种方式 Selenium自动化教程04:鼠标键盘网页的模拟操作 …

AJAX进阶(重点)

目录 ◆ 同步代码和异步代码 ◆ 回调函数地狱和 Promise 链式调用 什么是回调函数地狱? Promise - 链式调用 什么是Promise链式调用? Promise 链式应用 (重点) ◆ async 和 await 使用 async函数和await_捕获错误 ◆ 事…

算法设计与分析实验:滑动窗口与二分查找

目录 一、寻找两个正序数组的中位数 1.1 具体思路 1.2 流程展示 1.3 代码实现 1.4 代码复杂度分析 1.5 运行结果 二、X的平方根 2.1 具体思路 2.2 流程展示 2.3 代码实现 2.4 代码复杂度分析 2.5 运行结果 三、两数之和 II-输入有序数组 3.1 采用二分查找的思想 …

ES6详解

一 let 和 const ES6中可以使用let和const声明变量,用法类似于var const声明的为常量,不可修改(但声明对象,对象中的属性可以修改),由于这个特性,它需要在声明的同时就赋值,否则报错…

SpringBoot+SqlServer查询接口

SpringBootSqlServer查询接口 文章目录 SpringBootSqlServer查询接口1. pom环境配置2. common工具包3. 实体类接口映射4. Service层Controller层 需求&#xff1a;根据站号查询前一个小时的所有数据&#xff0c;将数据返回格式为Map<String,List<Map<String,String>…

双非本科准备秋招(9.2)——力扣哈希

1、383. 赎金信 跟昨天的题大同小异&#xff0c;因为只有26个字母&#xff0c;所以可以建个有26个坑位的数组。 做完昨天的题目&#xff0c;这个题没啥新意。 class Solution {public boolean canConstruct(String ransomNote, String magazine) {int[] hashTable new int[…

语言模型大战:GPT、Bard与文心一言,谁才是王者?

如何对GPT-3.5、GPT-4、Bard、文心一言、通义千问的水平进行排序&#xff1f; 在聊技术原理之前我们来先看看几个产品的团队背景 一、团队背景 1.1、ChatGPT ChatGPT团队的成员大多具有计算机科学、人工智能、自然语言处理、机器学习等相关领域的高等教育背景&#xff0c;有…

十分钟发布自己的NFT

概述 本文将以一个例子来说明如何在opensea快速发布自己的NFT智能合约&#xff08;ERC721&#xff09;。本着DRY&#xff08;Dont Repeat Yourself&#xff09;原则&#xff0c;我们需要站在巨人的肩膀上来搭建自己的应用&#xff0c;使用经过社区审计和实践检验的代码可以有效…

【Netty技术专题】「原理分析系列」Netty强大特性之ByteBuf零拷贝技术原理分析

零拷贝Zero-Copy 我们先来看下它的定义&#xff1a; “Zero-copy” describes computer operations in which the CPU does not perform the task of copying data from one memory area to another. This is frequently used to save CPU cycles and memory bandwidth when t…

Cubase 13.0下载安装教程,附安装包和工具,轻松解决安装问题

前言 Cubase是一款专业级的高级音乐创作软件&#xff0c;凭借其无与伦比的灵活工具&#xff0c;您可以快速和直观地创造任何类型的音&#xff0c;充满了各种各样的虚拟仪器、效果和数干种声音。 准备工作 1、Win7及以上系统 2、提前准备好 Cubase 13.0 安装包 没有的可以参…

Kafka高级_生产者ACk机制数据一致性问题

Kafka高级_生产者ACk机制&数据一致性问题 目录需求&#xff1a; 设计思路实现思路分析1.Kafka高级_生产者ACk机制2.Kafka高级数据一致性问题 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c…

基于51单片机天大的滚动显示Protues仿真设计

一、设计背景 数码管是一种常见的数字显示设备&#xff0c;它主要由发光二极管&#xff08;LED&#xff09;和控制电路组成。LED数码管可以分为共阳&#xff08;公共阳极&#xff09;和共阴&#xff08;公共阴极&#xff09;两种类型。在共阳数码管中&#xff0c;每个数码管的阳…

【性能测试】常见适用场景以及策略

面对日益复杂的业务场景和不同的系统架构&#xff0c;前期的需求分析和准备工作&#xff0c;需要耗费很多的时间。而不同的测试策略&#xff0c;也对我们的测试结果是否符合预期目标至关重要。 这篇博客&#xff0c;聊聊我个人对常见的性能测试策略的理解&#xff0c;以及它们…

RabbitMQ中死信交换机的应用,工作原理,实现案例

目录 一、介绍 1. 概述 2. 应用场景 3. 工作原理 二、应用 1. 讲述 2. 运用 三、案例 1. 实践 2. 代码整合 每篇一获 一、介绍 1. 概述 死信交换机是用来处理消息队列中无法被消费者正确处理的消息的交换机。当消息在队列中变成死信时&#xff0c;它会被重新发送…

指针的深入理解(一)

这一节主要复习数组指针&#xff0c;int (* )[ ] 就是数组指针类型的标志。 因为有&#xff08;&#xff09;将*括起来&#xff0c;所以&#xff08;*&#xff09;表示一个指针。[ ] 表示数组&#xff0c;所以&#xff08;*&#xff09;[ ]就表示一个指向数组的指针&#xff…

Day02-课后练习2-参考答案(数据类型和运算符)

文章目录 巩固题1、案例&#xff1a;今天是周2&#xff0c;100天以后是周几&#xff1f;2、案例&#xff1a;求三个整数x,y,z中的最大值3、案例&#xff1a;判断今年是否是闰年4、分析如下代码的计算结果5、分析如下代码的计算结果6、分析如下代码的计算结果7、分析如下代码的计…

STM32以太网接口的配置和使用方法详解

STM32 微控制器提供了多种系列和型号&#xff0c;不同型号的芯片可能有不同的以太网接口&#xff0c;包括MAC&#xff08;媒体访问控制器&#xff09;和PHY&#xff08;物理层接口&#xff09;等组件。在这里&#xff0c;我们以STM32F4系列为例来详细介绍以太网接口的配置和使用…

【精品教程】如何查看iOS崩溃日志

简介 当一个应用程序崩溃&#xff0c;会产生一个崩溃报告&#xff08;crash report&#xff09;&#xff0c;并存储到设备中。崩溃报告描述了应用程序崩溃的条件&#xff0c;通常包含每个执行线程的完整回溯。查看崩溃报告可以帮助我们了解应用程序的崩溃情况&#xff0c;并尝…