自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 问答 (3)
  • 收藏
  • 关注

原创 处理高并发下奖励领取场景

本文提出了一套高并发场景下的奖励发放系统设计方案。针对用户集中领奖可能导致的服务压力,系统采用Resilience4j进行限流和熔断保护,结合RocketMQ实现异步削峰处理。核心创新点包括:1)通过Redis锁+数据库唯一索引实现双重幂等控制;2)采用"MQ即时重试+定时补偿"的双重保障机制;3)支持可配置的重复领奖场景,通过动态生成bizId确保业务灵活性。系统通过状态机记录处理过程,实现了最终一致性,避免了分布式事务的复杂性。实验表明,该方案能有效应对每秒数千次的高并发请求,确保奖

2025-07-24 15:51:39 1110

原创 直播通知核心业务

新直播就是创建新的直播间,从/live/create 入手就可以找到对应的通知代码。通过定时任务,每三秒一个周期,来获取待触发和触发失败次数不大于三次的任务。封装到一个dto中,最后通过RocketMq发送任务,其他系统拿到该消息,进行对应的处理。直播通知的配置,首先是需要在对应的业务卡中进行配置的,业务卡中配置的为默认的,之后创建直播间时,该直播间的通知机制会默认继承其业务卡的通知配置信息。回放上线代码逻辑,就添加了一个通知任务: 回放通知任务。更新直播中短信召回任务,直播中语音消息召回任务。

2025-02-14 18:22:53 162

原创 直播抽奖核心业务逻辑

通过对上面的缓存的梳理,又加深了对逻辑的理解。并详细的对核心逻辑进行解释首先就是讲师端查询抽奖场次信息接口,首先鉴权,看操作的用户是讲师还是观众,此时是讲师,那么就会查询所有的抽奖场次。这里会使用缓存(前缀LOTTERY_DRAW_CACHE_LOTTERY_DRAW_INFO)。将查出来的数据直接返回即可然后就是讲师端的发起抽奖的接口,首先就是使用分布式锁实现幂等操作,校验身份,发起抽奖只能是讲师或者主持人,校验直播状态,直播状态只能为直播中和暂停状态,校验当前场次的状态。

2025-02-13 11:58:43 173

原创 合并回放视频核心业务逻辑梳理

在主持人/主播开启直播后,云直播Lvb也开启了直播混流录制,录制的视频将会存储在云点播vod中。当存储在云点播vod后会触发回调,对回放视频信息进行存储。考虑到直播时长可能会很长,避免一次性处理录制视频耗费大量时间,所以采取分段录制进行存储方法。腾讯云直播提供了,可以对直播时间段,录制文件大小进行分段录制生成文件,并且搭配云点播vod,可以自动存储到云点播中。通过分段处理,可以提高处理的效率,并且也能减少数据丢失的风险,直播过程中出现断流,等情况导致某个分段录制失败,已经录制好的分段也不会受影响。

2025-02-12 11:33:44 138

原创 允许添加多个自定义字段,并且新增校验

和之前设置直播的插件,互动工具的逻辑大致一样。其中有一些不一样,之前插件,互动工具处理删除修改操作时是直接删除之前的所有数据,然后再添加新传入的数据。校验:自定义的字段名称不能和已有的字段名称一样,并且不能和可选字段的名称一样。所以当使用第三方请求工具绕过前端校验,直接发送数据时,还是会发生名称重复的情况。此时需要在后端做好校验规则。核心来说一下该表的核心知识,首先可选字段是被初始化在这张表中,liveEntrycode为0的就是可选的字段。当设置完信息字段后,用户在观看直播前,均需要填写信息字段的表格。

2025-02-06 17:29:03 124

原创 直播链接新增无门槛观看链接

拿到permitUrl进行访问直播间时会校验对应的入场规则,如果previewKey合法,则可以跳过检查,直接观看直播。核心实现通过传递一个previewKey参数,来校验是否是合法的无门槛链接,满足条件则直接跳过校验。当对previewKey进行验证时,根据规则来判断是否合法,开播前一小时,下播后x小时之前,直播未被取消。都可以访问,其余都会重定向到错误页面。其中的核心就是previewKey参数的生成,可以知道的是,previewKey是需要加密的,所以前后端需要统一的一个秘钥来生成并解析。

2025-02-06 17:25:40 173

原创 直播激励新增一种激励方式

目前四个激励任务类型除了观看回放任务,其余三个只有在直播处于未开始的状态设置,其余状态是不可以进行修改的,修改包括增删改。累积观看任务丁当发放逻辑,当直播结束一小时后,给满足观看时长的用户发送对应的丁当奖励。异步处理发送丁当逻辑,系统解耦等。live_user_ext_behavior表中主要记录,用户完成任务获取丁当的行为进行记录,主要用来判断用户针对任务相关操作的合法性,比如是否重复领取了不该重复领取的任务奖励。新增一个任务类,主要解决方案就是,多添加一个累积观看直播的枚举,用来标识任务类型。

2025-02-06 17:24:55 259

原创 相关视频功能新增业务卡选择

修改直播设置接口中,通过需求中所说,当启用回放相关视频时,默认选择的是当前业务卡。在设置的时候通过判断是否启用回放相关视频,如果启用那就设置传过来的appid,如果禁用,那就直接设置当前业务卡appid,这样可以保证每次禁用后,都保存的当前业务卡id,下次启动时,查询的结果就会时当前业务卡id。获取业务卡接口中没什么特殊的,唯一一个点就是,获取当前业务卡信息是通过业务卡token来获取的,通过业务卡token可以获取appid,进而获得业务线id,查询业务线下的业务卡信息也就没什么问题了。

2025-02-06 17:23:53 55

原创 推荐关注弹窗关注状态同步

服务关注卡片的增删改的具体实现,之前在总结tab插件中也是使用的这个接口,所以他们两个在大方向是一样的,都是在进行对应的操作之前,把之前的配置信息进行删除。每一个互动工具的校验规则和保存方式会有所不同。根据需求文档描述,当直播间配置了卡片互动工具时,讲师端推送卡片信息,观众在pc端可以看见推送的关注信息,并且对推送的卡片信息进行关注,此时pc端显示已关注。问题原因总结:前端通过后端返回的成功信息,进行修改对应卡片的关注状态,此时后端在关注逻辑上使用异步处理的方式导致返回结果时,关注状态并没有及时进行修改。

2025-02-06 17:22:00 246

原创 回放上线支持上线多个回放视频

上线回放视频中,当直播状态处于进行中或者暂停是不能进行上线处理的,直播间的状态分为未开始,进行中,暂停中,已结束,已取消。live_media与live_media_clip是一对多的关系,live_media存储着该直播间回放视频的源文件,live_meida_clip存储着由源文件剪辑生成的,剪辑视频。互动视频说明:互动视频就是类似一种视频推荐的作用,可以给每一个父节点添加2-4个子节点,当父节点视频播放完后,会推荐设置的子节点视频信息,以此类推。每当对回放视频,互动视频操作时,都要保存最近的更新人。

2025-02-06 17:20:24 70

原创 自定义tab允许创建多个

在管理端针对tab的增删改操作,都由info接口实现,核心实现就是在对传入的tab操作时,都将删除历史的配置。其中使用redis进行对插件信息的缓存,每一次修改操作都会删除对应的插件缓存信息。在接口中首先会去缓存中查询对应的插件信息,如果没有就会去数据库查询对应的插件信息,并保存redis并返回。在info接口中,针对传入的tab插件数量进行判断,定义一个合法值,当插件数量超过合法值就报错并提醒用户。在直播间获取tab信息接口中,由于显示多个tab界面样式会出错,为了兼容,每次只返回tab列表中的第一个。

2025-02-06 17:17:26 69

原创 工厂模式 + 策略模式

通过对两个设计模式的初步了解,可以知道他们的优缺点,以及怎么进行互补。对于工厂模式,他的核心作用就是根据不同的参数,给我返回不同的对象。对于策略模式,针对同一个接口,不同的类有不同的实现逻辑。但是如何根据动态参数去找到对应的策略类,是个问题。这时候工厂模式就能巧妙的解决这个问题。首先就是要实现动态参数与具体的策略实现类进行关系绑定,这个关系由工厂类来进行维护,所有具体产品角色(具体策略)都继承或实现抽象产品角色(抽象策略)在初始化时将自己的绑定关系注册到工厂类中。

2025-02-06 16:43:08 914

原创 URL参数-签名认证Sign

SIgn简单来说就是一串字符串,不过不是简单的字符串,他是具有一定规范的字符串。请求的参数信息秘钥(客户端和服务端进行约定)加密算法sign生成逻辑:将请求参数与秘钥按照字符串进行拼接,通过约定的加密算法进行加密,加密完成后的字符串就是sign签名。

2025-02-06 16:35:36 666

原创 RateLimiter 限流器

顾名思义,限流器就是,限制请求访问的数量,,防止大量请求在短时间访问统一资源导致服务崩溃等问题。

2025-02-06 16:31:43 453

原创 详解synchronized

锁 想必大家并不觉得陌生,起简单作用就是防止共享资源被同时访问,这时就是需要锁住。锁就有许多种锁了,像syn cas reentrantlock等 我们这一章 主要来说说 synchronized。在jdk1.5及之前时 我们的syn锁还是一个重量级锁,相对于lock就显得很笨重,但1.6后java从jvm层面对syn锁进行了优化,相比之前 效率还是很不错。接下来我们将从以下几个点对Synchronized锁进行剖析。

2023-09-13 18:16:51 137 2

原创 详解三次握手和四次挥手

服务器第一次收到客户端的 SYN 之后,就会处于 SYN_RCVD 状态,此时双方还没有完全建立其连接,服务器会把此种状态下请求连接放在一个队列里,我们把这种队列称之为半连接队列。当然还有一个全连接队列,就是已经完成三次握手,建立起连接的就会放在全连接队列中。如果队列满了就有可能会出现丢包现象。这里在补充一点关于SYN-ACK 重传次数的问题:服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传。

2023-02-02 12:01:59 155

原创 常见BeanFactory后置处理器

BeanFactory后置处理器,最开始我们也有讲过,这里复习一下,并将一个新的beanfactroy后置处理器。先将第一个。我们先说下测试环境。执行入口我们用beanfactory的实现类。测试类是Config类,里面有@Bean注解注入的类。

2023-02-02 11:00:30 213

原创 mybatis的几种分页,你学”废“了吗?

该插件内部实现了PageInterceptor拦截器,mybatis会加载这个拦截器到拦截器链中。当我们调用PageHelper.startPage方法时,就会在当前线程中设置一个ThreadLocal变量来保存分页的信息,当分页拦截器拦截了sql语句时,就会从threadlocal中取出分页信息,动态的为sql语句拼接limit关键字。最后再把ThreadLocal中的分页信息清除。

2023-02-02 10:43:56 143

原创 BeanFactory和ApplicationContext的基本认识

图文结合详细讲解BeanFactory和Application之间的关系和区别,已经他们各自的具体功能

2022-12-16 18:43:20 395 5

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除