珠海网站设计哪家好,中英繁网站源码,阿里服务器怎么做网站服务器,云服务器哪家最便宜本发明涉及嵌入式软件中间件#xff0c;具体涉及一种基于消息队列的高并发抢单功能实现方法。背景技术#xff1a;中间件是一种独立的系统软件或服务程序#xff0c;分布式应用系统借助这种软件在不同的技术之间共享资源#xff0c;管理计算资源和网络通讯。它在计算机系统…本发明涉及嵌入式软件中间件具体涉及一种基于消息队列的高并发抢单功能实现方法。背景技术中间件是一种独立的系统软件或服务程序分布式应用系统借助这种软件在不同的技术之间共享资源管理计算资源和网络通讯。它在计算机系统中是一个关键软件它能实现应用的互连和互操作性能保证系统的安全、可靠、高效的运行。中间件位于用户应用和操作系统及网络软件之间它为应用提供了公用的通信手段并且独立于网络和操作系统。中间件为开发者提供了公用于所有环境的应用程序接口当应用程序中嵌入其函数调用它便可利用其运行的特定操作系统和网络环境的功能为应用执行通信功能。RocketMQ是一款分布式、队列模型的消息中间件具有以下特点(1)能够保证严格的消息顺序(2)提供丰富的消息拉取模式(3)高效的订阅者水平扩展能力(4)实时的消息订阅机制(5)亿级消息堆积能力MongoDB是一个基于分布式文件存储的数据库由C语言编写旨在为WEB应用提供可扩展的高性能数据存储解决方案。具备高性能、易部署、易使用等特点。主要功能特性有(1)面向集合存储易存储对象类型的数据(2)模式自由(3)支持动态查询(4)支持完全索引包含内部对象(5)支持查询(6)支持复制和故障恢复(7)使用高效的二进制数据存储包括大型对象(如视频等)(8)自动处理碎片以支持云计算层次的扩展性(9)支持RUBYPYTHONJAVACPHP等多种语言(10)文件存储格式为BSON(一种JSON的扩展)(11)可通过网络访问如何有机结合消息队列中间件及高速内存数据库实现高并发抢单功能是嵌入式软件领域当前一项研究热点问题。技术实现要素本发明所要解决的技术问题是提出一种基于消息队列的高并发抢单功能实现方法基于消息队列的特性结合高速内存数据库实现高可靠、高并发、易维护、分布式的抢单功能。本发明解决其技术问题所采用的技术方案是作为一种实施例本发明的基于消息队列的高并发抢单功能的实现方法包括加入抢单方法所述加入抢单方法包括为需要参加抢单的业务划分不同的类型并设置对应的不同的优先级抢单队列将需要参加抢单的业务根据其类型加入对应的优先级抢单队列中如果加入成功则保存入列记录如果加入失败则记录失败信息并保存到数据库。作为进一步优化所述抢单队列采用先进先出机制。作为进一步优化通过设置多个Topic来设置不同的优先级抢单队列。作为进一步优化所述抢单业务的类型包括预处理抢单、要素纠偏抢单、全图纠偏抢单、规则检查抢单、模拟记账抢单、复核抢单。作为进一步优化所述保存入列记录的方式为采用异步刷盘方式结合内存数据库记录已加入队列的抢单业务若发生程序中断、服务器宕机事件在重启应用后自动从内存数据库中读取未消费的信息自动加入队列。作为进一步优化通过入列失败信息表来记录抢单业务加入失败信息对于第一次写入失败信息表的抢单业务通过定时程序在定时时间到来时再次将该抢单业务加入到队列中若仍然加入失败则通知人工干预。作为另一种实施例本发明的基于消息队列的高并发抢单功能的实现方法包括撤销抢单方法所述撤销抢单方法包括通过创建撤销记录表来记录需要撤销的业务单在进行抢单处理时从抢单队列中取出业务单若该取出的业务单在撤销记录表中则直接丢弃该业务单从而达到撤销该业务单的目的若撤销业务单失败则记录撤销业务单失败信息并保存到数据库。作为进一步优化对于第一次保存的撤销业务单失败信息通过定时程序在定时时间到来时再次对业务单进行撤销若仍然撤销业务单失败则通知人工干预。作为第三种实施例本发明的基于消息队列的高并发抢单功能的实现方法包括抢单方法所述抢单方法包括采用多消费端的并发抢单方式从抢单列表中取出业务单后及时更新消费进度然后查询该业务单是否存在于撤销记录表中若存在则直接丢弃该业务单然后从抢单列表中取出下一个业务单若不存在于撤销记录表中则继续查询该业务单对应的消费记录若已存在对应的消费记录则丢弃该业务单若不存在对应的消费记录则在对业务单进行处理后在消费记录表中保存对应的消费记录。作为进一步优化该方法还包括在对业务单进行处理时若出现抢单异常状况则通过抢单异常信息表记录这一状况通过定时程序在定时时间到来时再次对该业务单进行处理若仍然异常则通知人工干预。本发明的有益效果是基于消息队列(Rocketmq)的特性结合高速内存数据库(Mongodb)实现高可靠、高并发、易维护、分布式的抢单功能1、加入抢单方法利用消息队列特性和高速内存数据库解决无序问题、解决优先级问题、解决多类型问题、解决可靠性问题以及解决加入失败问题2、撤销抢单方法利用内存数据库实现消息队列删除功能3、抢单方法利用消息队列特性和高速内存数据库解决高并发下重复抢单问题、解决抢单队列消息重复时重复抢单问题、解决抢单异常问题。具体实施方式本发明旨在提出一种基于消息队列的高并发抢单功能实现方法基于消息队列的特性结合高速内存数据库实现高可靠、高并发、易维护、分布式的抢单功能。在实现高并发抢单功能之前需要进行以下工作1、安装消息队列(Rocketmq)服务包括nameserver服务和mqbroker服务安装完成后修改相关配置调整端口等信息安装内存数据库(Mongodb)并修改相关参数创建库名为cscbase的数据库。2、创建入列失败信息表(queue_fail_info)、入列记录表(queue_snatch_info)、消费记录表(queue_spending_info)、撤销记录表(queue_cancel_info)和抢单异常信息表(csc_message_info)3、搭建java环境分别开发加入抢单方法流程、撤销抢单方法流程、抢单方法流程的功能代码。下面具体阐释本发明中的基于消息队列的高并发抢单功能实现一、加入抢单方法即将需要参与抢单的业务加入到抢单队列的实现方法其包括为需要参加抢单的业务划分不同的类型并设置对应的不同的优先级抢单队列将需要参加抢单的业务根据其类型加入对应的优先级抢单队列中如果加入成功则保存入列记录如果加入失败则记录失败信息并保存到数据库。通过本方法可以解决如下几个问题(1)解决无序问题消息队列(Rocketmq)为采用先进先出(FIFO)机制可以严格的保证消息有序。应用中调用加入抢单方法时有序则可确保抢单时有序。(2)解决优先级问题抢单存在优先级问题如优先级高的业务先处理。Topic是消息中间件里一个重要的概念每一个Topic代表了一类消息有了多个Topic就可以对消息进行归类与隔离。因此利用Topic的这一特性将不同优先级的业务抢单放入不同的Topic中完美的解决了优先级问题。(3)解决多类型问题为减少程序复杂度及开发工作量我们将多类型抢单业务(如预处理抢单、要素纠偏抢单、全图纠偏抢单、规则检查抢单、模拟记账抢单、复核抢单等)共用抢单程序利用消息队列Topic和Tag进行归类和隔离。(4)解决可靠性问题程序中断服务器宕机等突发状况经常使已加入抢单池数据丢失造成不可逆的灾难。消息队列(Rocketmq)所有发往broker的消息有同步刷盘和异步刷盘机制。同步刷盘时消息写入物理文件才会返回成功因此非常可靠但因为要写入物理文件效率稍受影响异步刷盘时消息写入内存即返回成功内存数据定时异步写入物理文件此方式效率高但存在服务器宕机后数据丢失风险。本发明采用异步刷盘方式并结合内存数据库(Mongodb)技术记录所有已加入队列的抢单业务。程序中断服务器宕机后重启应用自动从内存数据库(Mongodb)中读取未消费的消息自动重新加入队列。(5)解决加入失败问题加入抢单队列时可能出现不可控异常造成加入抢单队列失败从而引起抢单丢失问题。本发明设计独立的入列失败信息表一旦发生加入抢单异常则写入到此信息表中定时程序重复执行指定次数后仍无法加入则通知人工干预。二、撤销抢单方法即对于已经加入抢单队列的业务由于业务需要又从抢单队列中删除的方法其包括通过创建撤销记录表来记录需要撤销的业务单在进行抢单处理时从抢单队列中取出业务单若该取出的业务单在撤销记录表中则直接丢弃该业务单从而达到撤销该业务单的目的若撤销业务单失败则记录撤销业务单失败信息并保存到数据库。由于消息队列(Rocketmq)不能指定删除队列中的消息因此本方法另辟蹊径利用内存数据库(Mongodb)保存撤销记录抢单时从队列中取出抢单消息若在撤销记录中则不处理直接丢弃从而达到删除的目的若撤销业务单失败则记录撤销业务单失败信息并保存到数据库对于第一次保存的撤销业务单失败信息通过定时程序在定时时间到来时再次对业务单进行撤销若仍然撤销业务单失败则通知人工干预。三、抢单方法即抢单时从抢单池中高效、稳定、准确取出业务信息的方法其包括采用多消费端的并发抢单方式从抢单列表中取出业务单后及时更新消费进度然后查询该业务单是否存在于撤销记录表中若存在则直接丢弃该业务单然后从抢单列表中取出下一个业务单若不存在于撤销记录表中则继续查询该业务单对应的消费记录若已存在对应的消费记录则丢弃该业务单若不存在对应的消费记录则在对业务单进行处理后在消费记录表中保存对应的消费记录。通过本方法可以解决如下几个问题(1)解决高并发下重复抢单问题高并发抢单时同一条业务信息会因为并发操作造成来不及修改抢单标志从而被重复抢单。本方法通过及时更新消费进度并结合Java线程安全很好的解决了这一难题为避免影响性能本方法采用多消费端的方式进行抢单大大提高抢单并发性。(2)解决抢单队列消息重复时重复抢单问题由于业务或者程序原因会导致部分业务信息重复加入到抢单队列如果不处理则会出现被抢多次的情况。本方法通过内存数据库保存消费记录完美解决这一问题。同时内存数据库高性能和分布式也为抢单方法的高性能奠定坚实基础。(3)解决抢单异常问题抢单时可能出现不可控异常造成队列读取成功但业务处理失败从而引起数据一致性问题。本发明设计独立的抢单异常信息表一旦发生抢单异常则写入到此信息表中定时程序重新执行处理程序若仍无法正常处理则人工通知干预。