SpringBoot使用kafka事务-消费者方
前言
在上一篇文章中,写到了如何在springboot中生产者如何使用kafka的事务,详情链接:Springboot使用kafka事务-生产者方
那么,这一篇就接着上篇所写的内容,讲解一下再springboot中消费者如何使用kafka的事务。
实现
在springboot中kafka的消费者配置也和生产者一样,有两种配置的方式:
- 第一种是使用springboot提供的自定装配机制
- 第二种是自定义配置
自动装配机制
在springboot的配置文件中加入以下代码即可实现
spring:kafka:bootstrap-servers: localhost:9092consumer:group-id: test_group #默认组id 后面会配置多个消费者组key-deserializer: org.apache.kafka.common.serialization.StringDeserializervalue-deserializer: org.apache.kafka.common.serialization.StringDeserializerisolation-level: read_committedenable-auto-commit: false #关闭自动提交auto-commit-interval: 100max-poll-records: 20 #批量消费 一次接收的最大数量
这样就实现了事务的自动状态,特别注意的是配置文件中的isolation-level属性,这个属性一定要设置读已提交的事务级别,这样才能配合生产者实现事务的特性。
使用
这种配置方式的使用就很简单了,
第一:新建一个管理类,类名上用Component注解标识为需要springboot管理
@Component
public class kafkaConfigs {
}
第二:使用springboot提供的KafkaListener注解,即可使用
@KafkaListenerpublic void testListener(String data) {log.info("接受到的数据为: {} ",data);}
全部代码如下:
@Component
public class kafkaConfigs {@KafkaListenerpublic void testListener(String data) {log.info("接受到的数据为: {} ",data);}
}
缺点
自动装配机制是很方便的,但是在一些场景下,我们需要连接多个kafka的地址来实现不同的业务,而且有的场景之下我们并不需要kafka的事务管理机制,所以这就需要用到我们的第二种方法,自定义配置了。
自定义配置
这次,我们使用springboot为我们提供的KafkaListener注解来实现这个功能。
在yml配置文件中加入第二个kakfa的连接地址,并且将事务紫隔离级别去掉即可。
spring:kafka:bootstrap-servers: localhost:9092bootstrap-servers-2: localhost2:9092consumer:group-id: test_group #默认组id 后面会配置多个消费者组key-deserializer: org.apache.kafka.common.serialization.StringDeserializervalue-deserializer: org.apache.kafka.common.serialization.StringDeserializerenable-auto-commit: false #关闭自动提交auto-commit-interval: 100max-poll-records: 20 #批量消费 一次接收的最大数量
注意bootstrap-servers-2这个key,是我们自定义的key,它在kafka的自动配置包里面是没有的。
使用
自定义配置的使用和第一种使用方式大同小异,具体为:
第一:新建一个管理类,类名上用Component注解标识为需要springboot管理
@Component
public class kafkaConfigs {
}
第二:使用springboot提供的KafkaListener注解,并且在这里标识需要使用到的kafka连接地址以及事务隔离级别
@KafkaListener(topics = "my-topics2" , groupId = "my-group2",properties = {"bootstrap.servers=${spring.kafka.bootstrap-servers-2}","isolation.level=read_committed"})public void testListener1(String data) {log.info("接受到的数据为: {} ",data);}
全代码如下:
@Component
public class kafkaConfigs {@KafkaListener(topics = "my-topics2" , groupId = "my-group2",properties = {"bootstrap.servers=${spring.kafka.bootstrap-servers-2}","isolation.level=read_committed"})public void testListener1(String data) {log.info("接受到的数据为: {} ",data);}
}
可以看到,我们使用了properties属性指定了需要连接的kafka地址,并且指定了事务的隔离级别,这样就实现了一个具有事务功能的消费者,并且对其他方法不产生任何影响。
总结
以上,我们使用两种方式配置springboot中kafka消费者如何使用事务,读者可以结合上篇文章结合食用,效果更佳!
上篇链接:Springboot使用kafka事务-生产者方
相关文章:
SpringBoot使用kafka事务-消费者方
前言 在上一篇文章中,写到了如何在springboot中生产者如何使用kafka的事务,详情链接:Springboot使用kafka事务-生产者方 那么,这一篇就接着上篇所写的内容,讲解一下再springboot中消费者如何使用kafka的事务。 实现…...
C# 实现PictureBox从指定的文件夹内进行翻页操作
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System...
Eureka 注册中心的使用
环境 springboot springcloud Eureka-Server注册中心服务端 pom.xml导入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId><version>2.2.7.RELEAS…...
vue3 组件通信方式
文章目录 组件通信方式props自定义事件全局事件总线v-modeluseAttrsref与$parentprovide与injectpiniaslot 组件通信方式 props 实现父子组件通信,在vue3中可以通过defineProps获取父组件传递的数据。且在组件内部不需要引入defineProps方法可以直接使用! 父组…...
淘宝商品API使用示例:如何通过调用外部API来获取淘宝商品价格销量主图详情数据
淘宝上的商品信息量非常之大,商品的详情信息也很齐全。如何通过调用外部API来实现批量获取商品价格销量主图详情等信息呢?上周刚好完成了一个完整的淘宝商品采集项目,今天特来分享一下。 接口名称:item_get 请求地址:…...
RK3568-android11-适配ov13850摄像头
硬件连接 主要分为两部分: mipi接口:传输摄像头数据 i2c接口:配置摄像头和对焦马达芯片寄存器相关驱动 |-- arch/arm64/boot/dts/rockchip DTS配置文件 |-- drivers/phy/rockchip/|-- phy-rockchip-mipi-rx.c mipi dphy 驱动 |-- drivers/media||-- platform/rockchip/isp1…...
基于Sider-chatgpt3.5-编写一个使用springboot2.5连接elasticsearch7的demo程序,包括基本的功能,用模板方法
下面是一个使用Spring Boot 2.5连接Elasticsearch 7的示例程序,包括基本的功能,使用模板方法: 首先,确保你的项目中添加了以下依赖: <dependency> <groupId>org.springframework.boot</groupId> &l…...
nodejs中如何使用Redis
Redis介绍: Redis 是一个开源的内存数据结构存储器,一般可以用于数据库、缓存、消息代理等,我们常在项目中用redis解决高并发、高可用、高可扩展、大数据存储等问题; 它本质上是一个NoSql(非关系型数据库)…...
golang append坑
查看如下代码输出 package mainimport "fmt"func main() {a : make([][]int, 0)b : make([]int, 0)b append(b, 1)a append(a, b)fmt.Println(a)b[0] 2fmt.Println(a) }输出: [[1]] [[2]]可以看出b改变之后,在a中也发生了改变,…...
PaddleNLP使用Vicuna
LLaMA 模型 LLaMa 是一个大型语言模型,由 Meta 开源。它的全称是 Large Language Model Meta AI,参数量从 70 亿到 650 亿不等。例如,130 亿参数的 LLaMA 模型在大多数基准上可以胜过参数量达 1750 亿的 GPT-3,而且可以在单块 V1…...
jackson常用操作
#jackson常用操作 jackson序列化框架,一些常用的操作 依赖 <!--Jackson包--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.15.2</version></de…...
ios ipa包上传需要什么工具
目录 ios ipa包上传需要什么工具 前言 一、IPA包的原理 二、IPA包上传的步骤 1.注册开发者账号 2.apk软件制作工具创建应用程序 3.构建应用程序 4.生成证书和配置文件 5.打包IPA包 6.上传IPA包 三、总结 前言 iOS IPA包是iOS应用程序的安装包,可以通过iT…...
科目1基础知识快速入门精简
科目1-4 科目一,又称科目一理论考试、驾驶员理论考试。》学习道路交通安全法律、法规和相关知识学习 考试内容包括驾车理论基础、道路安全法律法规、地方性法规等相关知识,再加地方性法规。考试形式为上机考试,100道题,90分及以…...
安卓逆向 - 某东app加密参数还原
本文仅供学习交流,只提供关键思路不会给出完整代码,严禁用于非法用途,拒绝转载,若有侵权请联系我删除! 目标app:5Lqs5LicYXBwMTEuMy4y 目标接口:aHR0cHM6Ly9hcGkubS5qZC5jb20vY2xpZW50LmFjdGl…...
Visual Studio(2022)生成链接过程的.map映射文件以及.map映射文件的内容说明
微软的官方说明 /MAP(生成映射文件) | Microsoft Learn 设置步骤 1. 右键项目属性, 连接器 -> 常规 -> 启用增量链接,设置为否。如下图: 2. 连接器 -> 调试 生成调试信息 设置为 生成调试信息 (/DEBUG) 生成程序数据库…...
A. Gift Carpet
time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Recently, Tema and Vika celebrated Family Day. Their friend Arina gave them a carpet, which can be represented as an n⋅m�⋅&…...
技术科普:汽车开放系统架构AUTOSAR
01.AUTOSAR简介 汽车是现代人类实现“千里江陵一日还”的交通工具,而计算机则是使人脱离繁杂重复脑力劳动的生产技术,两者的结合催生了汽车电子产业的蓬勃发展。 21世纪初,随着汽车电子应用需求的不断增多与硬件资源不断丰富,软…...
说说HTTP 和 HTTPS 有什么区别?
分析&回答 http协议 超文本传输协议,是互联网上应用最多的协议,基于TCP/IP通讯协议来传递信息,用于从WWW服务器传输超文本到本地浏览器的传输协议。 https协议 我们可以将其看作是以安全为目标的http协议。在http协议的基础上增加了S…...
Pygame中Trivia游戏解析6-5
3.4 next_question()函数 next_question()函数的作用是显示下一个题目。当用户按下“确认”按键后,将会显示下一个题目,代码如下所示。 if self.scored or self.failed:self.scored Falseself.failed Falseself.correct 0self.colors [white,white…...
Java8新特性2——方法引用
Java8新特性2——方法引用 注:以下内容基于Java 8,所有代码都已在Java 8环境下测试通过 目录: Java8新特性1——函数式接口&lambda表达式方法引用Stream 1. 方法引用 方法引用提供了一种替代 lambda 表达式的语法,允许以更…...
Pikachu靶场实战:File Inclusion漏洞利用与防御全解析
1. File Inclusion漏洞初探:从理论到靶场实战 文件包含(File Inclusion)漏洞是Web安全领域最常见的漏洞类型之一,它允许攻击者通过参数控制加载服务器上的任意文件。想象一下,你家的门锁如果设计不当,小偷只…...
【DeepSeek-R1背后的技术】系列七:冷启动——从“零”到“一”的智能启蒙
1. 冷启动:AI模型的"启蒙教育" 想象一下,你面前站着一个刚出生的婴儿,他对这个世界一无所知。如果你直接把他扔进大学课堂,会发生什么?他可能会哭闹、听不懂任何内容,甚至产生恐惧心理。这就是一…...
微信小程序数据绑定与渲染全解析:从入门到精通
微信小程序数据绑定与渲染实战指南:解锁高效开发密码 微信小程序开发中,数据绑定与渲染机制是构建动态界面的核心。不同于传统网页开发,小程序采用独特的双线程架构,数据通信需要特殊处理。本文将深入剖析数据绑定的底层原理&…...
Fay开源数字人框架:终极多语言翻译与全球化应用指南 [特殊字符]
Fay开源数字人框架:终极多语言翻译与全球化应用指南 🌍 【免费下载链接】Fay fay是一个帮助数字人(2.5d、3d、移动、pc、网页)或大语言模型(openai兼容、deepseek)连通业务系统的agent框架。 项目地址: h…...
zh3100组合式选粉机的设计【说明书+27张CAD图纸】
zh3100组合式选粉机作为粉体分级领域的核心设备,其设计融合了流体力学、机械传动与颗粒分离理论,通过优化结构参数与气固两相流场分布,实现高精度、低能耗的粉体分级作业。该设备采用模块化组合设计理念,将选粉室、导流装置、分级…...
移动端Transformer加速新范式:EAA注意力机制与SwiftFormer架构解析
1. 移动端Transformer的算力困局与EAA的破局思路 当Transformer架构从NLP领域跨界到计算机视觉时,所有人都被ViT的表现惊艳到了。但当我们兴冲冲地想把这种"视觉Transformer"塞进手机里时,现实给了我们当头一棒——传统的多头自注意力机制&…...
避坑指南:从零搭建Anaconda+CUDA+PyTorch+Pycharm深度学习环境
1. 深度学习环境配置全景图 刚接触深度学习的新手往往会在环境配置这一步卡住好几天。我见过太多人在Anaconda、CUDA、PyTorch的版本兼容性问题上来回折腾,最后连代码都没开始写就放弃了。其实只要理解这四个核心组件的关系,配置过程就会变得清晰很多。 …...
AI万能分类器零基础入门:5分钟搭建无需训练的文本分类系统
AI万能分类器零基础入门:5分钟搭建无需训练的文本分类系统 1. 引言:为什么选择零样本分类? 想象一下这样的场景:你刚接手一个新项目,需要快速对大量用户反馈进行分类。传统方法要求你收集数据、标注样本、训练模型&a…...
ASPICE 的起源与发展历程(二)
ASPICE 并非汽车行业原生创造,其核心底层源自通用软件过程评估体系,是汽车行业基于自身高安全、高可靠的产业特性,定制化迭代的行业专属标准。(一)底层起源:通用SPICE 准的诞生1994 年,国际标准…...
从赛道到产线:智能车竞赛如何为《美国工厂》精神谱写青春代码
1. 智能车竞赛:制造业的青春实验室 当《美国工厂》纪录片中那些机械臂精准运作的画面还在脑海中挥之不去时,我站在全国大学生智能车竞赛的现场,突然意识到这两者之间存在着某种奇妙的联系。智能车竞赛就像是一个微缩版的制造业实验室…...
