首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >数据采集上报之灯塔SDK详解

数据采集上报之灯塔SDK详解

作者头像
腾讯大讲堂
发布于 2021-05-10 02:10:15
发布于 2021-05-10 02:10:15
4.6K0
举报

作者:jackhuali  腾讯PCG工程师

|导语  灯塔SDK当前的日活终端设备数超过10亿,日事件上报量超过万亿条,灯塔SDK是什么,灯塔SDK做了哪些工作来支撑如此大业务需求的呢?灯塔SDK是怎么保障业务客户端事件数据上报的准确性的呢?带着问题我们接下来一步步进行拆解。

灯塔SDK从2011年左右诞生至今,并随着PCG数据治理地持续推进,灯塔SDK逐步被各个业务线所深度使用,灯塔SDK逐渐收敛其余上报通道,成为了公司级统一的数据上报通道。

以下总结了大家日常对灯塔SDK集成、测试、数据验证等使用过程中的一些问题,主要是这三类:

1、what,是什么,灯塔SDK是什么,在数据治理中扮演什么角色。

2、why,为什么,为什么业务线需要使用灯塔SDK,灯塔SDK可以解决哪些问题。

3、how,怎么做,灯塔SDK做了什么,核心功能、架构和流程是什么,如何进行数据治理。

本文将围绕灯塔SDK是什么、为什么、怎么做这三大类问题,对灯塔SDK进行偏向于技术方向的整体介绍。

灯塔SDK是什么

简介

数据在互联网业务的重要性至关重要,经典的数据生成到消费流程如下:

数据的上报,是整个大数据链路中,介于数据采集和后台数据存储分析的桥梁,完整高效的数据采集和上报是至关重要的环节,规范的采集和及时且不丢失的数据上报是保证数据质量的前提,而灯塔SDK所做的事情就是将业务客户端埋点采集的数据高效不丢失地上报至后台。

基于PCG数据治理的背景下,目前PCG的数据采集上报及消费建立了统一的规范和工具,规范的业务客户端数据采集及上报流向如下:

  • 通过大同SDK采集的规范事件,直接自动默认通过灯塔SDK上报到灯塔日志接收后台;业务自定义上报的事件也通过灯塔sdk上报到灯塔日志接收后台;
  • 灯塔日志接收后台调用阿塔API数据转换成AttaID通过阿塔系统传输;
  • 阿塔将数据分发到灯塔的敏捷分析平台,在灯塔上可以配置和查看数据分析报表;
  • 如果数据需要在tdw上使用,阿塔可以将数据分发到tdbank,由tdbank入库到tdw上使用;
  • 如果业务需要接出数据到自己的业务系统,也可以通过阿塔、CDMQ接出消费。

我们可以从上述流程,并结合腾讯在大数据各个链路的现有系统上,理解灯塔SDK在整个大数据链路的位置。

数据流向的角度看,

从整个大数据系统架构的角度看,

可以看到,灯塔SDK是大数据链路中的基础,直接集成在业务客户端的作为数据上报的入口,

  • 业务客户端负责基于代码埋点、可视化埋点或者无埋点方案采集业务需求的数据;
  • 然后将数据透传给集成的灯塔SDK;
  • 灯塔SDK会将数据保证不丢失地情况下,快速地上报给灯塔后台的日志接收服务。

基于上述流程定义,灯塔SDK是腾讯通用的客户端用户行为事件(数据源)上报通道,带有本地缓存、失败重试,旁路监控等功能来保证日志安全可靠地上报至后端。

使用灯塔SDK上报日志,可以无缝使用灯塔敏捷分析、灯塔可视化DataTalk等功能,以及将数据接出至业务的系统进行消费,建立用户画像、建立标签、进行AB实验分析、智能推荐等。

支撑的业务

在数据治理的背景下,灯塔SDK是PCG全部业务客户端的标准统一数据上报通道,公司内外使用灯塔SDK的活跃的APP数量有数千个,目前的服务业务包括:

  • PCG内部业务,手Q、微视、看点、QQ浏览器、腾讯视频、腾讯新闻、腾讯动漫等PCG绝大部分业务;
  • 公司内兄弟BG,IEG、TME、WXG和CSIG等,如企业微信、QQ邮箱、王者荣耀、王者营地、QQ音乐、全名K歌、开心鼠英语、腾讯会议等业务;
  • 兄弟公司或者其他公司业务,如斗鱼直播、阅文等等。

相关平台的关系

与灯塔SDK上下游相关的一些常用工具平台或SDK,如大同SDK、MTA上报、boss平台等,简单梳理他们之间的关系如下:

  • Mta上报:teg数据平台部提供,已经准备下线,建议使用灯塔sdk代替;
  • BOSS平台:从上报角度看,主要指boss的蜂巢系统,目前已经整合到阿塔系统,所有数据的使用传输管理等都在阿塔系统,boss的上报功能建议使用灯塔SDK代替;
  • 大同SDK:是PCG数据治理产生的采集规范产品,用于做数据采集的规范治理,目的在统一采集能力,包括自动化采集、数据采集规范等,采集后的数据通过灯塔SDK上报;
  • 阿塔atta平台:整合了原BOSS蜂巢、罗盘DC、消息通道等三个数据上报通道系统,是一个数据上报、传输、分发的数据通道系统,其中上报功能可以使用灯塔SDK替代;
  • Aegis、TAM、007:主要是致力于业务客户端相关的监控上报及多维监控分析系统,一站式发现问题,定位问题,分析问题;
  • Athena:一站式用户行为分析平台,包括SDK无埋点采集、上传及后台分析系统,主要聚焦提供界用户操作轨迹、界面热力图、界面漏斗流等用户行为分析服务。

更多各平台间详细关系参考下图。

Logging、Metrics和Tracing

在开发过程中,很多同学是否偶尔也会搞混所谓的日志采集上报平台、监控采集上报分析平台和链路追踪平台,他们之间似乎都有很多相似性又有所区别,而这些系统之间似乎又耦合或者有和灯塔SDK类似的一部分能力。为了弄清楚这些系统间的关系,我们来看韦恩关系图:

很明显他们之间确实是有所部分重叠的功能,但这些系统关注的领域和特点是不一样的。

  • 日志系统,是对我们应用或者系统事件做一个记录,这些记录是我们问题排查,取证的一些依据;公司内的如鹰眼日志系统、腾讯云日志服务CLS和智研日志系统;
  • 度量系统,是对某些我们关注事件的聚合,当达到一定指标我们会设置告警,会设置自适应机制,会有容灾等等;公司内如007监控、Aegis、TAM等系统都属于这个范畴;
  • 追踪系统,更关注请求的质量和服务可行性,是我们优化系统,排查问题的高阶方法,在当前火热的微服务架构中是必不可少的基础组件;公司内如天机阁;
  • 灯塔SDK的上报,更专注于APP客户端的业务事件和用户行为事件的上报,将事件上报至后台并存储、分发,进一步运用在业务分析、智能运营和推荐等。本质上,灯塔SDK结合灯塔分析平台,是有作为日志logging系统和Metric监控系统使用的简单能力,但这不是灯塔SDK专注和推荐的。 

为什么使用灯塔SDK

可以解决哪些问题

业务线为什么要使用灯塔SDK?它可以解决哪些痛点?

相信在任何一款互联网产品上线前或者运营过程中,肯定都需要考虑怎么去度量产品上线后的运营情况,包括DAU、留存、收益等等情况,对于开发、产品、运营和数据的同学,可能都遇到如下类似的问题:

  1. 埋点的数据不准确,突然某个版本上线之后,数据少了、多了、慢了,无法追踪原因;数据上报缺乏专门的策略调优和错误监控,难以保证上报数据的质量;
  2. 线上的网络、用户行为、业务间相互影响等情况复杂,业务自己上报数据可能会导致数据丢失或者及时性低,也无法衡量埋点数据的准确性,无法自我验证数据的可靠性;
  3. 埋点错埋、漏埋、多埋,开发埋点的数据无法进行实时校验;
  4. 一个APP里面包含的业务非常多,希望将各个业务的数据进行隔离,业务自己上报的话,管理复杂;
  5. 业务有多个端的APP,包括Android、iOS、小程序、flutter、H5、PC端等,如果自己去上报数据,各端实现成本高且难以统一标准;
  6. 监管越来越严格的情况下,没有可以使用的统一设备ID,导致数据间的串联分析、广告追踪等出现短路;
  7. 推过一些规范,没有专人维护和质量监控,过一段时间又回到原始状态;
  8. 基于错误的数据得出错误的结论,基于错误的结论做了错误的行动。

正所谓,数据的质量,决定了数据价值的上限!没有好的数据治理,无法保证好的数据质量!数据治理,需要统一的采集方案,统一的上报链路,灯塔SDK正是专注于解决这些问题的推出的统一上报通道方案。

支持的平台及能力

  • 支持各个平台的事件上报功能,并且在一个业务客户端里支持不同的业务使用不同的appkey进行上报,Android和iOS平台支持事件的立即上报,对于高实时的场景如推荐应用的事件可以采用立即上报的功能;
  • 支持大部分平台的事件统计机制,可以准确衡量事件上报的丢失情况,事件上报的延迟情况等;支持灯塔SDK自我数据置信度的监控验证,可以验证自我上报率和及时率等数据的可靠性;
  • 自带设备ID插件能力、稽核插件能力和AB使用插件能力;
  • Android、iOS和Mac平台支持海外业务上报事件数据到海外的服务器;
  • 支持远程配置服务,可以进行策略及开关能力的远程下发,如远程关闭某些敏感信息的采集或者调整上报的策略等;
  • 建立了专门的实时联调验证平台,提供给业务进行数据上报是否成功及准确性的验证,支持各个平台的事件数据上报后进行实时联调,开发测试同学可以实时验证数据上报的准确性,实时联调平台;
  • 支持SDK运行过程中自身的错误监控,可以实时监控线上SDK运行的情况,结合灯塔分析平台,可以分析错误的趋势,错误的详细日志,捞取错误的用户的在线日志,捞取异常用户的日志流水分析等等手段;
  • 支持开发调试过程中设置严苛模式下,可以自检SDK使用过程中的一些致命错误,如参数设置错误,未初始化SDK等;
  • 支持对线上运行的SDK,捞取线上出现bug用户的第一现场运行日志,进行bug归因分析;

除SDK上述自身的能力,还可以结合灯塔分析平台,捞取线上低上报率的用户分析,进一步针对低上报率的用户拉取其日志明细分析等。灯塔SDK在开发和推广过程中,已经积累和具备了较为完善的业务功能及监控运维可能。

灯塔SDK做了什么

灯塔SDK当前的日活终端设备数超过10亿,日事件上报量超过万亿条,在终端高并发(对于终端设备来说,秒级数十条甚至百级别的事件产生频率,是属于比较高并发的场景)及复杂的网络环境下,要如何将如此高频率的事件集快速地传输至后台是需要解决的最主要问题。

了解灯塔SDK的基本情况之后,我们是否好奇,灯塔SDK是如何做到支撑如此巨大业务需求的呢?灯塔SDK是怎么保障业务客户端事件数据上报的准确性的呢?带着问题我们接下来一步步进行拆解。

模块架构

灯塔SDK在4.0版本开始对整个技术架构做了重构,以模块化的方式分层拆分了各个模块,在代码层面和监控运维层面提升了SDK的稳定性和增加线上问题排查的手段。

可以看到,灯塔SDK团队在架构的设计层面,按照一个APP的基本标准进行设计,完善了SDK从开发到监控运营层面的基础能力。并且灯塔SDK在架构设计层面,保留了充分的扩展性支持,收敛了旧SDK无法弹性扩展新能力的接口设计,充分抽象了灯塔SDK需要关注的主体“事件”这个对象模型,为后续的新事件类型、新上报策略和新上报需求预留了自由扩展的空间。

灯塔SDK怎么提升上报成功率

对于客户端事件采集后上报到后台的通道,上报的成功率是SDK关注的北极星指标,为了提升指标的成功率,我们首先来看下业界都有哪些方案。

大体来说,都是先入库再发送,先保证上报率再保证及时率,每个SDK的发送策略有些区别。相对于业界的SDK,灯塔SDK增加了更多的数据可靠性验证和保证的策略,增加了更多精细化的上报策略及错误监控,提供更加精细化的事件类型区分和专门的上报策略控制等。

精细化上报策略

先来看下图灯塔SDK的基本上报策略逻辑,大致的逻辑以保证事件不丢失为基本目标,并在此基础上优先保证上报的成功率,其次是上报的及时率。所以SDK采用的基本策略是,除需立即上报进行即刻消费的事件外,其余事件均是优先入db存储,并使用各自的轮询定时器进行累加地多线程并发上报。

当然,灯塔SDK内部包含了更多的精细化的处理策略,比如对于数据存取db的并发队列控制和上报并发队列的控制,以在在性能和上报及时率上找到均衡点;为了保证上报成功率统计准确性,对事件在db的存取进行后入先出的策略控制;对轮询定时器的间隔在server端的接收能力、客户端的网络带宽占用和内存、CPU性能等间保证均衡最优等。

建立指标度量体系

有了策略之后,灯塔SDK在业务侧集成上线之后,究竟怎么去衡量灯塔SDK的上报质量呢,业界的很多SDK会默认信任上报发送的准确性,不去衡量丢失和发送失败的统计,这对于很多精细化运营的业务以及需要准备数据质量的后续数据链路来说,这样的数据源是不可靠的。灯塔SDK为此,专门建立了相关的度量指标。

事件唯一标识LogID

对于灯塔SDK来说,衡量业务上报的事件流的质量,需要对每条事件进行唯一标识的标记,需要满足以下的特征:

  • 唯一性:最基本的要求,需要满足单设备下APP级别里区分业务维度的ID唯一性,不能出现重复的ID号,便于业务间统计问题隔离和上报质量的区分;
  • 整形离散化:为便于对基于时间递增的事件流的统计拆分,需要数学意义上的整形进行离散化,基于此容易对事件进行统计和缺失事件的分析;
  • 单调递增:需满足统计过程中衡量事件流的连续性及单调性,为便于常规统计,保证下一个ID一定大于上一个ID;

基于上述特性,我们最先可以想到使用数据库本身的自增ID,但是显然对于有分库分表、业务隔离和增删改查后的连续自增均不满足,更重要的是需要对入库前的数据质量做统计时,等到入库再进行ID标记,在时序上已无法满足要求。

分析上述的ID特性要求,虽然事件流上报到后台是可以理解为分布式的上报,但是我们统计上报质量,是基于统计每个设备的每个业务的上报质量之后,再统一汇聚全部设备的质量计算出某业务的上报质量,所以可以发现此ID不需要进行联网分布式生成,可以基于设备维度在本地生成,并进行业务间隔离计算并存储即可,灯塔SDK将此ID称为事件的LogID序号。

灯塔SDK在实际计算生成LogID时,会区分灯塔SDK的版本进行统计,当SDK版本升级时会重置LogID。

上报成功率

上报成功率,通过计算在某个时间区间内,实际后台接收到的事件与需要上报的事件的比例,是衡量灯塔SDK事件上报成功质量最关键的指标。

由上述LogID的原理,上报的每条事件都会有一个独立的上报序号,称为LogID,这个ID在同设备、同app、同进程下、同业务下,会连续自增。

在灯塔后台,会对LogID做一个统计,对于同设备、同app、同进程、同业务的日志,计算如下:

因为SDK上报日志时,LogID是连续自增的,因此,丢失的事件会在count(distinct LogID)里体现出来,举例某一天某台设备的日志上报情况分析如下,

从全局的角度计算某个业务的上报成功率,为了消除不同设备上报的事件数量不一样引起的加权不一样,则不能将单个的设备上报成功率直接求和取平均,而是需要计算全部实际设备接收的事件量之和与全部设备实际应该上报的事件量的比例,计算如下:

在统计的时间细粒度上,除了经典的T+1天的粒度,可以按照分/时/天等粒度灵活计算上报的成功率,以反映不同粒度的上报成功率。

上报及时率

上报及时率,是通过计算距离事件产生到上报成功的某个时间区间内,成功上报的事件被与需要上报的事件的比例,衡量的是事件从产生到被灯塔SDK上报至后台需要的时间,反映的是事件上报的及时性。例如事件在00:00只00:05的5s事件内产生的数量是100条,实际上报到后台的是99条,则1s内的及时率就是99%。

从另外的角度近似地统计,也可以计算某个事件区间内,后台接收的事件里,其事件的产生时间也在这个时间区间的事件的占比。

上报重复率

上报重复率,是指同一条事件被灯塔SDK上报至后台两次甚至多次,计算的是在某个时间区间内,有重复的事件占总事件量的比例。

SDK Crash率

为提升灯塔SDK的质量,灯塔SDK基于以下两个指标,亦提供了严格的crash SLA保障。

日Crash率,灯塔客户端SDK当天产生的crash的数量DTCrashCount,业务方APP当天的日活用户ActiveUserCount,DTCrashCount / ActiveUserCount即为灯塔SDK的日crash率

占业务方Crash率的比例,即灯塔SDK的Crash率占业务方APP Crash率的比率。

建立监控体系

对于线上系统,可观测性是非常重要的指标,对于问题的感知和排查来说,监控是非常重要的一环,灯塔SDK为此从SDK运行错误,LogID统计置信度(可信度)和crash异常方面均做了非常细致的监控。

因为灯塔SDK自身作为一个上报通道,也可以作为监控上报的通道,但是为了监控灯塔SDK ,灯塔SDK使用腾讯的atta系统作为监控旁路,对灯塔SDK做监控上报,并将监控数据接入灯塔分析平台进行统计和分析。

错误监控与性能监控

错误监控是针对灯塔SDK运行过程中一些可能出现的错误进行的监控上报,灯塔SDK针对这些监控项按模块化区分,并使用atta旁路通道上报监控,相关错误监控模块有:

  • 前置检验监控
  • 数据库增删改查相关监控
  • 序列化、加解密、加压缩相关监控
  • 上报及后台错误监控
  • 网络监控等

除了错误监控模块外,灯塔SDK还有相关的性能、耗时、置信度等监控亦是通过atta通道进行上报。

例如如下线上的错误监控,

6**错误是DB相关的错误,在15号上线4.1.22之后迅速上升:

  • 未升级前4.0.17版本,603错误码db插入约60w+;升级后4.1.22版本,603约350w,增长6倍
  • 未升级前4.0.17版本,604错误码db查询约25w+;升级后4.1.22版本,604约150w,增长6倍

进一步分析,601错误码打开/创建db/表错误 并结合错误信息,是db创建失败,导致上面的数据增删改查失败,事件量下跌。

LogID置信度监控

在业务使用灯塔SDK上报数据后,在查看和分析线上的数据时,如分析APP的DAU或者使用时长等关键指标时,往往会怀疑其某个新活动的DAU应该会更高,此时我们会给出灯塔SDK的上报率情况等给业务看,但是业务可能会怀疑我们的上报率统计就可能存在bug或者质疑上报率的可信度,所以灯塔SDK需要更进一步针对自身的LogID统计的上报成功率等指标做置信度的验证。

基于灯塔SDK前面已经建设的atta旁路监控通道,可以复用来进一步做LogID的监控统计,通过独立于灯塔上报通道的atta通道验证自身上报成功率的置信度,具体的置信度的监控上报逻辑如下:

异常crash监控

当前业界的crash监控均是基于APP维度的,尚未有较为完善的基于SDK维度的crash监控,灯塔SDK在此结合了各业务APP自己的crash监控能力和RDM的crash监控能力,基于RDM后台的crash监控能力,针对灯塔SDK的监控标识字段,将各个业务的灯塔SDK的crash情况单独拉取并建立灯塔SDK的crash质量看板,基于此可以不需要等业务的反馈,较业务更及时地感知灯塔SDK的线上crash情况。

基于此,灯塔SDK提供了日crash率十万分之一的SLA,在线上业务中,如果有高于十万分之一的线上crash率,则灯塔SDK会优先解决crash问题。

建立质量看板、质量播报及异动告警

基于上述的监控能力,建立相关的看板及异动告警等,进一步及时感知问题。

  • 上报率、及时率等看板、crash等大盘
  • 企业微信群播报
  • 异动告警

建立线上问题诊断手段

atta线上单用户错误分析

结合业务的上报成功率,用户上报事件的日志详细流水及atta错误监控等,可以进行业务的线上问题定位。

  • 基于业务上报成功率,对于有异常上报成功率的业务,可以针对性地将上报成功率低于80% 的用户查询出来
  • 将第一步的用户详细日志查询出来, 用LogID分析用户上报率偏低的原因
  • 如果第二步得到初步结果, 则修复可能出现问题的点,如果无法找到问题,那么就可以使用atta 上报的错误监控来单独深度分析用户错误上报,,来确定导致上报率偏低的问题

线上单用户远程诊断日志捞取与分析

旧版本的灯塔SDK对线上问题定位,主要依赖业务集成方:

  • 需要集成方重新打包集成、打开日志、在开发环境本地运行复现、IDE里copy获取日志、日志返回给灯塔开发同学定位问题
  • 像IEG的msdk等二次封装了灯塔SDK的业务,定位问题的流程更为漫长,甚至重新打包等无法支持,缺乏定位问题的主动权
  • 其次,对于在分析平台捞取到的低上报率的线上用户,缺乏获取上报率低的第一现场日志的手段

SDK迫切需要自我定位线上问题的能力建设,可以在线获取问题现场的第一手运行日志。 新版本的灯塔SDK更进一步地建立了在线诊断日志捞取能力。

如果基于atta单用户线上错误分析仍无法找到异常原因,还可以结合灯塔SDK建设的在线诊断日志捞取能力,基于atta上报的错误,通过设备ID可以定位用户低上报率影响大的那批用户,以配置下发的方式,捞取线上用户的灯塔SDK记录的关键操作行为和详细错误日志进行分析定位。

效果收益

基于灯塔SDK建立的指标体系、监控体系和线上问题诊断手段,灯塔SDK针对性地根据指标数据分析及线上的监控问题进行修复和优化。目前灯塔SDK在上报成功率、及时率、重复率和crash率方面均达到比较不错的效果。

其中上报成功率基本上较之前旧版本95%至99%的不稳定上报率,目前均稳定在99.5%以上,大部分业务可以达到99.8%甚至99.99%;上报的及时率可以达到98%以上,重复率在千分之三以下,针对需要低重复率的业务事件,灯塔SDK还可以进一步后台去重,将重复率降低到千分之一以下;灯塔SDK的crash率也已稳定在十万分之一以下。

近期热文

Nginx 架构浅析

高性能对象池实现

微信游戏推荐系统大揭秘

让我知道你在看

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯大讲堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
第四十四章: 基于SpringBoot & AOP完成统一资源自动查询映射
本章内容比较偏向系统设计方面,简单的封装就可以应用到系统中使用,从而提高我们的编码效率以及代码的可读性。统一资源在系统内是不可避免的模块,资源分类也有很多种,比较常见如:图片资源、文本资源、视频资源等,那么资源统一处理的好处是什么呢?大家有可能会有疑问,我把资源存放到业务表内岂不更好吗?这样查询起来也方便,并不需要关联资源信息表!当然设计不分好坏,只有更适合、更简单!接下来带着疑问进入本章的内容。 本章目标 基于SpringBoot平台结合AOP完成统一资源的自动查询映射。 构建项目 本章使用到的依赖相对来
恒宇少年
2018/06/27
1.5K0
第四十一章: 基于SpringBoot & RabbitMQ完成DirectExchange分布式消息消费
消息队列目前流行的有KafKa、RabbitMQ、ActiveMQ等,它们的诞生无非不是为了解决消息的分布式消费,完成项目、服务之间的解耦动作。消息队列提供者与消费者之间完全采用异步通信方式,极力的提高了系统的响应能力,从而提高系统的网络请求吞吐量。 每一种的消息队列都有它在设计上的独一无二的优势,在实际的项目技术选型时根据项目的需求来确定。 本章目标 基于SpringBoot项目整合RabbitMQ消息队列,完成DirectExchange(路由键)分布式消息消费。 SpringBoot 企业级核心技术
恒宇少年
2018/06/27
1.3K0
第四十三章: 基于SpringBoot & RabbitMQ完成TopicExchange分布式消息消费
我们在之前的两个章节第四十一章: 基于SpringBoot & RabbitMQ完成DirectExchange分布式消息消费、第四十二章: 基于SpringBoot & RabbitMQ完成DirectExchange分布式消息多消费者消费提高了RabbitMQ消息队列的DirectExchange交换类型的消息消费,我们之前的章节提到了RabbitMQ比较常用的交换类型有三种,我们今天来看看TopicExchange主题交换类型。 本章目标 基于SpringBoot平台完成RabbitMQ的TopicE
恒宇少年
2018/06/27
1.3K0
第二十七章:SpringBoot使用ApplicationEvent&Listener完成业务解耦
ApplicationEvent以及Listener是Spring为我们提供的一个事件监听、订阅的实现,内部实现原理是观察者设计模式,设计初衷也是为了系统业务逻辑之间的解耦,提高可扩展性以及可维护性。事件发布者并不需要考虑谁去监听,监听具体的实现内容是什么,发布者的工作只是为了发布事件而已。 我们平时日常生活中也是经常会有这种情况存在,如:我们在平时拔河比赛中,裁判员给我们吹响了开始的信号,也就是给我们发布了一个开始的事件,而拔河双方人员都在监听着这个事件,一旦事件发布后双方人员就开始往自己方使劲。而裁判
恒宇少年
2018/06/27
1.1K0
第三十章:SpringBoot使用MapStruct自动映射DTO
MapStruct是一种类型安全的bean映射类生成java注释处理器。 我们要做的就是定义一个映射器接口,声明任何必需的映射方法。在编译的过程中,MapStruct会生成此接口的实现。该实现使用纯java方法调用的源和目标对象之间的映射,MapStruct节省了时间,通过生成代码完成繁琐和容易出错的代码逻辑。下面我们来揭开它的神秘面纱 本章目标 基于SpringBoot平台完成MapStruct映射框架的集成。 SpringBoot 企业级核心技术学习专题 专题 专题名称 专题描述 001 Spring
恒宇少年
2018/06/27
5.6K0
第三十七章:基于SpringBoot架构以及参数装载完成接口安全认证
在上一章第三十六章:基于SpringBoot架构重写SpringMVC请求参数装载中我们说到了怎么去重写SpringMVC参数装载,从而来完成我们的需求。本章内容会在上一章的基础上进行修改! 企业中接口编写是再频繁不过的事情了,现在接口已经不仅仅用于移动端来做数据服务了,一些管理平台也同样采用了这种方式来完成前后完全分离的模式。不管是接口也好、分离模式也好都会涉及到数据安全的问题,那我们怎么可以很好的避免我们的数据参数暴露呢? 本章目标 基于SpringBoot平台实现参数安全传输。 SpringBoot
恒宇少年
2018/06/27
1.5K0
第二十八章:SpringBoot使用AutoConfiguration自定义Starter
在我们学习SpringBoot时都已经了解到starter是SpringBoot的核心组成部分,SpringBoot为我们提供了尽可能完善的封装,提供了一系列的自动化配置的starter插件,我们在使用spring-boot-starter-web时只需要在pom.xml配置文件内添加依赖就可以了,我们之前传统方式则是需要添加很多相关SpringMVC配置文件。而spring-boot-starter-web为我们提供了几乎所有的默认配置,很好的降低了使用框架时的复杂度。 因此在使用xx.starter时
恒宇少年
2018/06/27
1.6K0
第四十二章: 基于SpringBoot & RabbitMQ完成DirectExchange分布式消息多消费者消费
在上一章第四十一章: 基于SpringBoot & RabbitMQ完成DirectExchange分布式消息消费我们讲解到了RabbitMQ消息队列的DirectExchange路由键消息单个消费者消费,源码请访问SpringBoot对应章节源码下载查看,消息队列目的是完成消息的分布式消费,那么我们是否可以为一个Provider创建并绑定多个Consumer呢? 本章目标 基于SpringBoot平台整合RabbitMQ消息队列,完成一个Provider绑定多个Consumer进行消息消费。 Spring
恒宇少年
2018/06/27
7650
第三十五章:SpringBoot与单元测试的小秘密
单元测试对于开发人员来说是非常熟悉的,我们每天的工作也都是围绕着开发与测试进行的,在最早的时候测试都是采用工具Debug模式进行调试程序,后来Junit的诞生也让程序测试发生了很大的变化。我们今天来讲解下基于SpringBoot结合Junit怎么来完成单元测试。 本章目的 基于SpringBoot平台整合Junit分别完成客户端、服务端的单元测试。 SpringBoot 企业级核心技术学习专题 专题 专题名称 专题描述 001 Spring Boot 核心技术 讲解SpringBoot一些企业级层面的核心组
恒宇少年
2018/06/27
1.5K0
第三十九章:基于SpringBoot & Quartz完成定时任务分布式单节点持久化
定时任务在企业项目比较常用到,几乎所有的项目都会牵扯该功能模块,定时任务一般会处理指定时间点执行某一些业务逻辑、间隔时间执行某一些业务逻辑等。我们在之前有讲过SpringBoot是已经集成了定时任务的,详见:第二十六章:SpringBoot使用@Scheduled创建定时任务,那么我们本章将会采用外置的quartz定时任务框架来完成定时任务的分布式单节点持久化,我们为什么要持久化定时任务呢? 在一些项目中定时任务可能是必不可少的,由于某种特殊的原因定时任务可能丢失,如重启定时任务服务项目后,原内存中的定时任
恒宇少年
2018/06/27
2.5K0
第四章:使用QueryDSL与SpringDataJPA实现多表关联查询
对于业务逻辑复制的系统来说都存在多表关联查询的情况,查询的返回对象内容也是根据具体业务来处理的,我们本章主要是针对多表关联根据条件查询后返回单表对象,在下一章我们就会针对多表查询返回自定义的对象实体。 本章目标 基于SpringBoot框架平台完成SpringDataJPA与QueryDSL多表关联查询返回单表对象实例,查询时完全采用QueryDSL语法进行编写。 构建项目 我们使用idea工具先来创建一个SpringBoot项目,添加的依赖跟第三章:使用QueryDSL与SpringDataJPA完成Up
恒宇少年
2018/06/27
3.4K0
第三十六章:基于SpringBoot架构重写SpringMVC请求参数装载
在国内企业开发项目中大多数都已经偏向Spring家族式的开发风格,在前几年国内项目都是以Structs2作为Web开发的主导,不过由于近几年发生的事情确实让开发者对它失去了以往的信心。与此同时Spring家族发布了SpringMVC,而且完美的整合Spring来开发企业级大型Web项目。它有着比Structs2更强大的技术支持以及更灵活的自定义配置,接下来我们就看看本章的内容,我们自定义实现SpringMVC参数绑定规则,根据业务定制参数装载实现方式。 本章目标 根据项目定制SpringMVC参数状态并了解
恒宇少年
2018/06/27
1.5K0
【快学springboot】5.全局异常捕获,异常流处理业务逻辑
上一篇文章说到,参数校验,往往需要和全局的异常拦截器来配套使用,使得返回的数据结构永远是保持一致的。参数异常springboot默认的返回结构:
Happyjava
2019/07/16
1.1K0
【快学springboot】5.全局异常捕获,异常流处理业务逻辑
第二章:使用QueryDSL与SpringDataJPA实现单表普通条件查询
在企业开发中ORM框架有很多种如:Hibernate,Mybatis,JdbcTemplate等。每一种框架的设计理念是不一样的,Hibernate跟我们本章讲解的SpringDataJPA是一致的框架都是全自动理念作为设计核心,让用户更少的去写SQL语句通过简单的配置就可以实现各种查询。而Mybatis框架则是半自动理念作为设计核心,SQL让用户自己定义实现了更好的灵活性。 本章目标 本章我们目标实现QueryDSL通用查询语言整合SpringDataJPA完成单表的查询多样化。 构建项目 下面我们先来创
恒宇少年
2018/06/27
1.8K0
第五章:使用QueryDSL与SpringDataJPA实现查询返回自定义对象
在我们实际项目开发中,往往会遇到一种多表关联查询并且仅需要返回多表内的几个字段最后组合成一个集合或者实体。这种情况在传统的查询中我们无法控制查询的字段,只能全部查询出后再做出分离,这种也是我们最不愿意看到的处理方式,这种方式会产生繁琐、复杂、效率低、代码阅读性差等等问题。QueryDSL为我们提供了一个返回自定义对象的工具类型,而Java8新特性Collection中stream方法也能够完成返回自定义对象的逻辑,下面我们就来看下这两种方式如何编写? 本章目标 基于SpringBoot平台完成SpringD
恒宇少年
2018/06/27
4.9K0
SpringBoot 实战 (十四) | 统一处理异常
如题,今天介绍 SpringBoot 是如何统一处理全局异常的。SpringBoot 中的全局异常处理主要起作用的两个注解是 @ControllerAdvice 和 @ExceptionHandler ,其中 @ControllerAdvice 是组件注解,添加了这个注解的类能够拦截 Controller 的请求,而 ExceptionHandler 注解可以设置全局处理控制里的异常类型来拦截要处理的异常。 比如:@ExceptionHandler(value = NullPointException.class) 。
JavaFish
2019/10/17
5650
SpringBoot 实战 (十四) | 统一处理异常
第三十八章:基于SpringBoot架构使用Profile完成打包环境分离
在中大型企业项目开发中,环境分离是必不可少的一步,然而现在的开发人员也只是有这个概念,还是有很多项目采用普通的方式,每次打包发布部署的时候改动一大堆的配置文件,有一个地方忘记改就相当于白更新了一次系统,这种修改配置文件完成环境更换的方式给我们带来了很多的困扰,浪费了我们很多宝贵的时间!早在Spring 3.1版本就已经为我们提供了环境分离的相关注解配置方式,不过在传统的Spring项目中配置Profile确实有点麻烦,在Spring版本的不断更新直到后来SpringBoot成长起来后Profile已经能够很
恒宇少年
2018/06/27
6820
Java统一异常处理(配置文件集中化定义)
无论任何项目,都避免不了在运行期间出现的一些异常,并伴随着因业务逻辑的需要而给出相应的提示,使得系统变得更加友好,这类提示处理,我们统称为异常处理(exceptiona handling)。
xcbeyond
2020/04/01
1.4K0
Java统一异常处理(配置文件集中化定义)
第七章:使用QueryDSL与SpringDataJPA实现子查询
在上一章我们讲到了QueryDSL的聚合函数,让我们重新认识了QueryDSL的便利之处,它可以很好的使用原生SQL的思想来进行Java形式的描述,编写完成也不需要考虑更换数据库存在的不兼容问题。当然QueryDSL还有很多我们没有发掘出来的核心技术,我们今天来讲解下”子查询“,看看QueryDSL是怎么完美的诠释了使用Java写SQL。 本章目标 基于SpringBoot平台完成QueryDSL整合JPA实现多表、单表子查询。 构建项目 我们使用idea工具创建一个SpringBoot项目,然后添加部分依
恒宇少年
2018/06/27
5.4K0
SpringBoot 2.0参数校验Hibernate Validator
springboot起步依赖自动添加了对 hibernate validator的依赖
喜欢天文的pony站长
2020/06/29
1.1K0
SpringBoot 2.0参数校验Hibernate Validator
推荐阅读
第四十四章: 基于SpringBoot & AOP完成统一资源自动查询映射
1.5K0
第四十一章: 基于SpringBoot & RabbitMQ完成DirectExchange分布式消息消费
1.3K0
第四十三章: 基于SpringBoot & RabbitMQ完成TopicExchange分布式消息消费
1.3K0
第二十七章:SpringBoot使用ApplicationEvent&Listener完成业务解耦
1.1K0
第三十章:SpringBoot使用MapStruct自动映射DTO
5.6K0
第三十七章:基于SpringBoot架构以及参数装载完成接口安全认证
1.5K0
第二十八章:SpringBoot使用AutoConfiguration自定义Starter
1.6K0
第四十二章: 基于SpringBoot & RabbitMQ完成DirectExchange分布式消息多消费者消费
7650
第三十五章:SpringBoot与单元测试的小秘密
1.5K0
第三十九章:基于SpringBoot & Quartz完成定时任务分布式单节点持久化
2.5K0
第四章:使用QueryDSL与SpringDataJPA实现多表关联查询
3.4K0
第三十六章:基于SpringBoot架构重写SpringMVC请求参数装载
1.5K0
【快学springboot】5.全局异常捕获,异常流处理业务逻辑
1.1K0
第二章:使用QueryDSL与SpringDataJPA实现单表普通条件查询
1.8K0
第五章:使用QueryDSL与SpringDataJPA实现查询返回自定义对象
4.9K0
SpringBoot 实战 (十四) | 统一处理异常
5650
第三十八章:基于SpringBoot架构使用Profile完成打包环境分离
6820
Java统一异常处理(配置文件集中化定义)
1.4K0
第七章:使用QueryDSL与SpringDataJPA实现子查询
5.4K0
SpringBoot 2.0参数校验Hibernate Validator
1.1K0
相关推荐
第四十四章: 基于SpringBoot & AOP完成统一资源自动查询映射
更多 >
交个朋友
加入架构与运维工作实战群
高并发系统设计 运维自动化实践
加入架构与运维趋势交流群
技术趋势前瞻 架构演进方向
加入架构与运维学习入门群
系统架构设计入门 运维体系构建指南
换一批
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档