最近的几个月里,我开始接手视频平台所需的“中间件”项目——级联平台,现在对这段时间的经历做一个总结
1.级联平台是平台与平台之间沟通的桥梁,它按照国家交通部拟定的协议(jt-1078)去完成了平台间定位数据的交换、实时视频的请求、历史视频的回放控制等等业务。级联平台实际上的工作就是对指令的接收、下发,类似于一种数据接入处理,需要对十六进制报文、网络传输有一定的知识储备,而难点在于对协议的理解以及实施过程中,对级联平台所需的项目在不影响其原有功能的情况下进行升级改造,使其能够配合级联平台进行工作。
2.刚接手的一个难点就是去理解原有的基于jt809的主从通信链路,jt1078协议还会基于一些其他协议的基础上实现,其中最重要的就是依赖jt809,业务的通信基于jt809设计好的主从链路,我们的主从链路实现是基于mina框架,采用tcp通信,用java代码实现的链路,在这其中学习到了主从链路的设计流程、以及这套基于spring的jt809项目如何配置部署
3.第二个难点就是考虑如何使其他的项目配合级联平台工作,这里需要考虑你作为哪一方平台时(上级或下级)如何让指定的业务走通,在我们的视频平台里,就是让web端、与车台通信端、流媒体端的项目协同配合,所以这首先就是得去熟悉原本项目的业务流程,再来就是梳理好整个业务流程,能够完整的走下来且合理,也为后面写技术文档做准备。
4.第三个难点就是可能出现kafka和redis滥用的问题,因为涉及到太多的项目传递,往往都是通过消息中间件来完成,不论是redis还是kafka,都要考虑它可能存在的问题,比如我们遇到的一个大坑,就是因为使用redis线程池的时候,maxWaitMillis这个参数为进行设置,导致短时间线程连接数到达上限后再次请求里连接造成等待,无法释放,默认值在此情况为永不超时,导致难以排查,最终是通过断点查看线程使用情况发现的问题。具体redis需要配置的参数:redis参数配置
同样,kafka作为消息传递的时候,也会有常见的重复消费、顺序消费等问题,需要考虑好,而在我的项目中出现过消费消息与级联通信链路初始化之间的冲突,需要设置好判断,让消息消费类kafkaHandler晚于创建链路对象jt809Client之后执行。
5.在项目测试上线后或多或少还有些问题,主要还是集中与有些设备或平台之间一些细微差别和协议之间的冲突,比如jt809和jt1078协议对于查看资源列表的业务中,file-size属性给予的长度限制不同,导致我们需要修改级联平台的file-size的类型为无符号整型去尽力匹配车台可能过来的视频大小
6.最后,在上线出现问题时,总结出了如下的排查方向
一、业务请求失败时,先查看日志,是否有接收到请求(web端请求、上级平台指令等)
二、web端请求没有则考虑kafka是否挂掉,上级平台则考虑链路是否断开
三、有请求,则断点查看web端请求是否正确,查看上级平台下发的报文是否正确(对照协议查看报文是非常有效的方式)
四、如若都没问题,可往线程使用进行查看,看是阻塞在哪了
五、若上级有下发但下级接收不到,考虑是否是网络丢包或是上级发送错链路
基于jt-1078协议的级联平台项目经验
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 推荐👍:接近100K star 的Java学习/面试指南[https://github.com/Snailclim...
- 1. 摘要 笔者在学习过程中遇到的大数据框架,系统和数据库遇到的一些问题总结和知识汇编,也分享给大家一起学习。 2...
- 应很多朋友的要求,今天分享一下如何使用SpringBoot和Netty构建高并发稳健的JT808网关,并且是兼容J...
- ├──第01阶段 | ├──01-反爬虫项目-项目七个阶段总体介绍.mp4 37.59M | ├──02-反爬虫项...