一种开通API实现优先级高并发调用的方法及装置与流程

文档序号:37467040发布日期:2024-03-28 18:50阅读:11来源:国知局
一种开通API实现优先级高并发调用的方法及装置与流程

本发明涉及通信领域,尤其是一种开通api实现优先级高并发调用的方法及装置。


背景技术:

1、业务开通能力是采控平台的核心能力,日常营业工单、停复机工单具有量级大、实时性要求高等特点,尤其在月初或者月末工单批量下发,如何快速高效的接收工单信息,快速下发执行工单,快速定位中断问题,是关注的主要问题。

2、通常使用的消息队列,如:kafka支持高并发请求,但是对于消息体超大的情况,特别是在开通中报文在兆级以上的,严重影响消息队列的发送及消费性能,且kafka消费后,记录并不能回溯,需要借助其他中间件。


技术实现思路

1、为解决现有技术存在的问题,本发明提供一种开通api实现优先级高并发调用的方法及装置,实现了高并发工单的收单,逻辑校验及工单分发作业,支持工单按优先级队列方式,高优先级先行,并减少内部损耗,提高工单执行效率,降低系统时延。

2、为实现上述目的,本发明采用下述技术方案:

3、在本发明一实施例中,提出了一种开通api实现优先级高并发调用的方法,该方法包括:

4、s01、异步收单,工单下发到应用时,收单接口不直接入库,而是推入redis队列,提高收单性能,同时为保证数据可靠性将数据持久化;

5、进一步地,所述s01包括:

6、s011、生成流水号,将流水号推入redis请求队列;

7、进一步地,所述s011中的redis请求队列,防止redis队列过长,使用多个队列,随机写入流水号。

8、s012、将请求报文、请求头信息序列化,并压缩写入redis;

9、s013、将原请求报文及请求头信息异步持久化写入es,如果写入es失败则持久化写入关系数据库mysql;

10、s014、监控工单执行状态队列。

11、进一步地,所述s014包括:

12、流水号同时写入redis缓存zset结构,成功入库后删除对应流水号,同时页面监控该redis数据,确定是否有流水号未进行处理或超期未执行。

13、工单开始执行跟据流水号通过哈希算法绝对值取余,分n个队列分别保存,可配置,分天建key,设置超时时间,分散存储避免缓存库多实例间数据倾斜。

14、s02、主单拆单,拆单线程从工单请求redis队列消费工单,多线程并发获取工单,先进先出方式;

15、进一步地,所述s02包括:

16、s021、获取流水号,根据流水号获取请求报文和请求头;

17、s022、将主工单报文中附属产品拆分为多个串并行子任务执行序列;

18、s023、拆单后,将子单推入相应的子单执行队列redis队列,根据系统配置高优先级业务设置任务务执行队列,并根据系统配置分片策略,其他使用默认队列;

19、s024、将子单请求报文信息序列化压缩写入redis;并将请求报文信息异步持久化入es,如果写入es失败则持久化入关系数据库mysql。

20、s03、子单执行,子单执行线程根据系统队列配置,依据子单业务队列优先级,队列取子单,调用子单执行程序;

21、消费队列程优先级可配,根据配置高优先级业务队列生成对应的业务消费线程,保证重要子单业务执行、线程数可配,控制南向并发数,100。

22、假如配置了两个队列,则30%的线程只给高优先级业务使用,70%的线程可复用,按配置顺序从队列里面消费子单。

23、s04、执行监管,定时扫描收单阶段写入的延迟队列,获取执行时长在设置阈值以上的工单,重置工单状态为挂起状态。

24、在本发明一实施例中,还提出了一种开通api实现优先级高并发调用的装置,该装置包括:

25、异步收单模块110,工单下发到应用时,收单接口不直接入库,而是推入redis队列,提高收单性能,同时为保证数据可靠性将数据持久化;

26、主单拆单模块120,拆单线程从工单请求redis队列消费工单,多线程并发获取工单,先进先出方式;

27、子单执行模块130,子单执行线程根据系统队列配置,依据子单业务队列优先级,队列取子单,调用子单执行程序。

28、执行监管模块140,定时扫描收单阶段写入的延迟队列,获取执行时长在设置阈值以上的工单,重置工单状态为挂起状态。

29、进一步地,所述异步收单模块110包括:

30、流水号模块111,生成流水号,将流水号推入redis请求队列;

31、redis写入模块112,将请求报文、请求头信息序列化,并压缩写入redis;

32、es与mysql写入模块113,将原请求报文及请求头信息异步持久化写入es,如果写入es失败则持久化写入关系数据库mysql;

33、工单状态监控模块114,监控工单执行状态队列。

34、进一步地,所述流水号模块111中的redis请求队列,使用多个队列,随机写入流水号。

35、进一步地,所述工单状态监控模块114包括:

36、流水号同时写入redis缓存zset结构,成功入库后删除对应流水号,同时监控该redis数据,确定是否有流水号未进行处理或超期未执行;

37、工单开始执行跟据流水号通过哈希算法绝对值取余,分n个队列分别保存,分散存储避免缓存库多实例间数据倾斜。

38、进一步地,所述子单执行模块130包括:

39、流水号获取模块121、获取流水号,根据流水号获取请求报文和请求头;

40、子任务拆分模块122、将主工单报文中附属产品拆分为多个串并行子任务执行序列,即将主工单拆分为多个子单;

41、子单入队模块123、拆单后,将子单推入相应的子单执行队列redis队列,根据系统配置高优先级业务设置任务务执行队列,并根据系统配置分片策略,其他使用默认队列;

42、子单请求报文信息写入模块124、将子单请求报文信息序列化压缩写入redis;并将请求报文信息异步持久化入es,如果写入es失败则持久化入关系数据库mysql。

43、进一步地,所述主单拆单模块120中消费队列程优先级可配,根据配置高优先级业务队列生成对应的业务消费线程,保证重要子单业务执行、线程数可配,控制南向并发数,100。

44、在本发明一实施例中,还提出了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现前述开通api实现优先级高并发调用的方法。

45、在本发明一实施例中,还提出了一种计算机可读存储介质,计算机可读存储介质存储有执行开通api实现优先级高并发调用的方法的计算机程序。

46、有益效果:

47、本发明一种开通api实现优先级高并发调用的方法及装置,基于redis、es实现异步队列,避免开通工单报文超大传输对kafka、rocketmq等常用队列报文体对传输性能的影响;基于业务优先级,高优先级业务配置权重高于普通业务;在不引入第三方中间件情况下,支持业务分发队列及超大报文传输难题,且避免报文在队列及日志多介质存储导致的空间浪费;并且支持基于zset的执行时长监控,异常处理。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1