CN114785749A - 一种消息群发处理方法和装置 - Google Patents
一种消息群发处理方法和装置 Download PDFInfo
- Publication number
- CN114785749A CN114785749A CN202210391976.0A CN202210391976A CN114785749A CN 114785749 A CN114785749 A CN 114785749A CN 202210391976 A CN202210391976 A CN 202210391976A CN 114785749 A CN114785749 A CN 114785749A
- Authority
- CN
- China
- Prior art keywords
- sending
- message
- group
- mass
- target
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 14
- 238000000034 method Methods 0.000 claims abstract description 83
- 238000001914 filtration Methods 0.000 claims abstract description 61
- 230000008569 process Effects 0.000 claims abstract description 36
- 230000005540 biological transmission Effects 0.000 claims description 61
- 238000012545 processing Methods 0.000 claims description 52
- 238000012216 screening Methods 0.000 claims description 36
- 230000002441 reversible effect Effects 0.000 claims description 14
- 230000004044 response Effects 0.000 claims description 13
- 238000012795 verification Methods 0.000 claims description 12
- 238000004590 computer program Methods 0.000 claims description 10
- 238000013500 data storage Methods 0.000 claims description 10
- 230000002085 persistent effect Effects 0.000 claims description 8
- 230000007246 mechanism Effects 0.000 claims description 7
- 238000012805 post-processing Methods 0.000 abstract 1
- 238000010586 diagram Methods 0.000 description 17
- 230000006870 function Effects 0.000 description 10
- 238000004891 communication Methods 0.000 description 8
- 238000007726 management method Methods 0.000 description 8
- 239000003814 drug Substances 0.000 description 6
- 230000005856 abnormality Effects 0.000 description 5
- 238000003745 diagnosis Methods 0.000 description 5
- 238000012384 transportation and delivery Methods 0.000 description 5
- 229940079593 drug Drugs 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 238000010276 construction Methods 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000002265 prevention Effects 0.000 description 3
- 230000002159 abnormal effect Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000001186 cumulative effect Effects 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 239000000835 fiber Substances 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 230000007115 recruitment Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 206010036872 Prolonged labour Diseases 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000009223 counseling Methods 0.000 description 1
- 201000010099 disease Diseases 0.000 description 1
- 208000037265 diseases, disorders, signs and symptoms Diseases 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000007717 exclusion Effects 0.000 description 1
- 230000036541 health Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012559 user support system Methods 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L51/00—User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
- H04L51/04—Real-time or near real-time messaging, e.g. instant messaging [IM]
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明公开了一种消息群发处理方法和装置,涉及互联网医疗领域。该方法的一具体实施方式包括:接收客户端传输的群发消息请求,根据请求参数中的过滤条件和待群发的消息内容,构建群发消息任务并发送至消息中间件;通过消费消息中间件的进程执行所述群发消息任务,以查找符合所述过滤条件的发送目标,向所述发送目标群发所述消息内容;根据对每个发送目标的消息发送结果,更新所述群发消息任务的消息群发结果,将所述消息群发结果返给客户端。该实施方式客户端不再将发送目标信息直接传输给服务端,而是将过滤条件传给服务端,由服务端通过后置确定发送目标和快照,保证群发消息任务的数据一致性、时效性和执行性能。
Description
技术领域
本发明涉及互联网医疗技术领域,尤其涉及一种消息群发处理方法和装置。
背景技术
随着互联网技术的发展,互联网医疗的应用日渐广泛。互联网医院的问诊完整流程中最为重要的功能之一是诊后管理,通过持续的诊后管理可以保持高复诊率,提升患者对医生的满意度,从而使治疗方案得到肯定,提高问诊的整体效果。
诊后管理中患者教育、心理辅导、健康管理等模式是比较常见的场景,这些诊后场景中构建医患IM(Instant Messaging即时消息)会话是不可或缺的桥梁,而医生给多个患者群发消息是非常便捷和高效的一种沟通方式。
然而每天的问诊单有上百万,一个医生累计会有上万的问诊患者,如何能同时向上万个患者发送诊后信息并不容易。目前群发消息方式主要有两种:限定少量发送目标即时发送、限定较多发送目标异步发送,这两种方式存在操作不便、响应不及时、无法同时向上万的患者发送、异常后需要用户重新操作、没有明确的发送结果等诸多问题。
发明内容
有鉴于此,本发明实施例提供一种消息群发处理方法和装置,至少能够解决现有技术存在操作不便、响应不及时、无法同时向上万的患者发送、异常后需要用户重新操作、没有明确的发送结果等诸多问题。
为实现上述目的,根据本发明实施例的一个方面,提供了一种消息群发处理方法,应用于服务端,包括:
接收客户端传输的群发消息请求,根据请求参数中的过滤条件和待群发的消息内容,构建群发消息任务并发送至消息中间件;
通过消费消息中间件的进程执行所述群发消息任务,以查找符合所述过滤条件的发送目标,向所述发送目标群发所述消息内容;
根据对每个发送目标的消息发送结果,更新所述群发消息任务的消息群发结果,将所述消息群发结果返给客户端。
可选的,所述查找符合所述过滤条件的发送目标,向所述发送目标群发所述消息内容,包括:
解析所述群发消息任务的消息体,得到消息批次号和所述请求参数,将所述请求参数转换为群发消息对象;
根据所述消息批次号查询数据库,得到所述群发消息对象的发送状态,在发送状态为未发送的情况下,查找符合所述过滤条件的发送目标,以获取与每个发送目标标识对应的发送目标信息;
将发送目标信息上传到对象存储服务器中作为快照,以基于所述快照向每个发送目标发送所述消息内容;其中,快照用于保证重新消费处理时发送目标信息的一致性。
可选的,所述过滤条件包括筛选字段、选择方式字段、发送目标标识,发送目标标识为正向选择的发送目标标识、或全选时取消选择的发送目标标识;
所述查找符合所述过滤条件的发送目标,包括:
查找符合所述筛选字段的所有发送目标,判断所述选择方式字段的键值是否为预设数值;
若是,则确定选择方式为正向选择,将所有发送目标中与所述发送目标标识对应的发送目标,作为本次待群发消息的对象;或
若否,则确定选择方式为全选和反向选择,将所有发送目标中除所述发送目标标识外的剩余发送目标,作为本次待群发消息的对象。
可选的,还包括:确定所述快照在所述对象存储服务器中的存储地址,将所述存储地址存储到数据库的所述发送记录中;以及
响应于重新消费处理操作,在发送状态为未完成的情况下,根据所述消息批次号从数据库中获取所述存储地址,以基于所述存储地址从所述对象存储服务器中获取所述快照。
可选的,所述请求参数还包括发送目标总数量,所述向所述发送目标群发所述消息内容,还包括:
计算所述发送目标总数量与子任务可处理的发送目标数量的商,对所述商向上取整,得到取整后的多个子任务;
使用线程池中的线程并行执行所述多个子任务,以基于所述快照向每个发送目标发送所述消息内容;
所述根据对每个发送目标的消息发送结果,更新所述群发消息任务的消息群发结果,包括:
每执行完一个子任务,根据对子任务中每个发送目标的消息发送结果,更新所述一个子任务的消息群发结果,在执行完所有子任务后,更新所述群发消息任务的消息群发结果。
可选的,还包括:将对每个发送目标的消息发送记录,存储到指定数据存储组件中;其中,消息发送记录包括消息发送结果,消息发送结果为发送成功或发送失败;以及
统计所述数据存储组件中消息发送结果为成功的消息发送记录数量,将所述发送记录的发送成功数量字段的键值,更改为所述消息发送记录数量。
可选的,所述请求参数还包括用户登陆标识;
所述根据请求参数中的过滤条件和待群发的消息内容,构建群发消息任务并发送至消息中间件,包括:
根据所述用户登陆标识,对所述请求参数进行防重提交校验;
响应于校验结果为通过,针对所述群发消息请求生成发送记录,将所述发送记录持久化到数据库中;其中,发送记录包括发送状态和消息群发结果;以及
根据所述请求参数中的过滤条件和待群发的消息内容,构建所述群发消息任务并发送到消息中间件中。
可选的,所述通过消费消息中间件的进程执行所述群发消息任务,还包括:
根据消息中间件的应答机制,若本次消费处理失败,则执行重新消费操作;以及
对所述群发消息任务加分布式锁,消费消息中间件的进程依据所述分布式锁执行所述群发消息任务,并在处理完成后释放所述分布式锁。
可选的,在所述构建群发消息任务并发送到消息中间件中的同时,还包括:返回消息群发请求结果给客户端。
为实现上述目的,根据本发明实施例的一个方面,提供了一种消息群发处理方法,应用于客户端,包括:
接收用户输入的筛选条件和消息内容,查找符合所述筛选条件的所有发送目标,以接收用户对多个发送目标的选择操作;
响应于用户对群发消息选项的选择操作,根据筛选字段、选择方式字段、发送目标标识,生成过滤条件,结合所述消息内容,得到请求参数;其中,发送目标标识为正向选择的发送目标标识、或全选时取消选择的发送目标标识;
基于所述请求参数生成群发消息请求并传输给服务端,之后接收服务端反馈的消息群发结果并进行显示。
可选的,所述接收用户对多个发送目标的选择操作,包括:
接收用户使用正向选择方式对多个发送目标的选择操作;或
接收用户在全选状态下,对一个或多个发送目标的取消选择操作。
可选的,在所述接收服务端反馈的消息群发结果并显示之前,还包括:接收服务端返回的消息群发请求结果并进行显示。
为实现上述目的,根据本发明实施例的另一方面,提供了一种消息群发处理装置,应用于服务端,包括:
接收模块,用于接收客户端传输的群发消息请求,根据请求参数中的过滤条件和待群发的消息内容,构建群发消息任务并发送至消息中间件;
群发模块,用于通过消费消息中间件的进程执行所述群发消息任务,以查找符合所述过滤条件的发送目标,向所述发送目标群发所述消息内容;
更新模块,用于根据对每个发送目标的消息发送结果,更新所述群发消息任务的消息群发结果,将所述消息群发结果返给客户端。
可选的,所述群发模块,用于:
解析所述群发消息任务的消息体,得到消息批次号和所述请求参数,将所述请求参数转换为群发消息对象;
根据所述消息批次号查询数据库,得到所述群发消息对象的发送状态,在发送状态为未发送的情况下,查找符合所述过滤条件的发送目标,以获取与每个发送目标标识对应的发送目标信息;
将发送目标信息上传到对象存储服务器中作为快照,以基于所述快照向每个发送目标发送所述消息内容;其中,快照用于保证重新消费处理时发送目标信息的一致性。
可选的,所述过滤条件包括筛选字段、选择方式字段、发送目标标识,发送目标标识为正向选择的发送目标标识、或全选时取消选择的发送目标标识;
所述群发模块,用于:
查找符合所述筛选字段的所有发送目标,判断所述选择方式字段的键值是否为预设数值;
若是,则确定选择方式为正向选择,将所有发送目标中与所述发送目标标识对应的发送目标,作为本次待群发消息的对象;或
若否,则确定选择方式为全选和反向选择,将所有发送目标中除所述发送目标标识外的剩余发送目标,作为本次待群发消息的对象。
可选的,所述群发模块,还用于:
确定所述快照在所述对象存储服务器中的存储地址,将所述存储地址存储到数据库的所述发送记录中;以及
响应于重新消费处理操作,在发送状态为未完成的情况下,根据所述消息批次号从数据库中获取所述存储地址,以基于所述存储地址从所述对象存储服务器中获取所述快照。
可选的,所述请求参数还包括发送目标总数量,所述群发模块,还用于:计算所述发送目标总数量与子任务可处理的发送目标数量的商,对所述商向上取整,得到取整后的多个子任务;
使用线程池中的线程并行执行所述多个子任务,以基于所述快照向每个发送目标发送所述消息内容;
所述更新模块,用于:每执行完一个子任务,根据对子任务中每个发送目标的消息发送结果,更新所述一个子任务的消息群发结果,在执行完所有子任务后,更新所述群发消息任务的消息群发结果。
可选的,所述更新模块,还用于:
将对每个发送目标的消息发送记录,存储到指定数据存储组件中;其中,消息发送记录包括消息发送结果,消息发送结果为发送成功或发送失败;以及
统计所述数据存储组件中消息发送结果为成功的消息发送记录数量,将所述发送记录的发送成功数量字段的键值,更改为所述消息发送记录数量。
可选的,所述请求参数还包括用户登陆标识;
所述接收模块,用于:根据所述用户登陆标识,对所述请求参数进行防重提交校验;
响应于校验结果为通过,针对所述群发消息请求生成发送记录,将所述发送记录持久化到数据库中;其中,发送记录包括发送状态和消息群发结果;以及
根据所述请求参数中的过滤条件和待群发的消息内容,构建所述群发消息任务并发送到消息中间件中。
可选的,所述群发模块,还用于:根据消息中间件的应答机制,若本次消费处理失败,则执行重新消费操作;以及
对所述群发消息任务加分布式锁,消费消息中间件的进程依据所述分布式锁执行所述群发消息任务,并在处理完成后释放所述分布式锁。
可选的,在所述构建群发消息任务并发送到消息中间件中的同时,还包括:返回消息群发请求结果给客户端。
为实现上述目的,根据本发明实施例的另一方面,提供了一种消息群发处理装置,应用于客户端,包括:
操作模块,用于接收用户输入的筛选条件和消息内容,查找符合所述筛选条件的所有发送目标,以接收用户对多个发送目标的选择操作;
生成模块,用于响应于用户对群发消息选项的选择操作,根据筛选字段、选择方式字段、发送目标标识,生成过滤条件,结合所述消息内容,得到请求参数;其中,发送目标标识为正向选择的发送目标标识、或全选时取消选择的发送目标标识;
传输模块,用于基于所述请求参数生成群发消息请求并传输给服务端,之后接收服务端反馈的消息群发结果并进行显示。
可选的,所述操作模块,用于:
接收用户使用正向选择方式对多个发送目标的选择操作;或
接收用户在全选状态下,对一个或多个发送目标的取消选择操作。
可选的,在所述接收服务端反馈的消息群发结果并显示之前,还包括:接收服务端返回的消息群发请求结果并进行显示。
为实现上述目的,根据本发明实施例的再一方面,提供了一种消息群发处理电子设备。本发明实施例的电子设备包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现上述任一所述的消息群发处理方法。
为实现上述目的,根据本发明实施例的再一方面,提供了一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现上述任一所述的消息群发处理方法。
根据本发明所述提供的方案,上述发明中的一个实施例具有如下优点或有益效果:用以解决现有技术中存在的操作不方便、响应不及时、无法同时发送上万的患者、异常后需要用户重新操作、没有明确发送结果等诸多的问题,为用户提供具备高效率和可靠性的群发消息服务,如在互联网医疗场景中,可以提升复诊率、提高患者满意度、维护好医患关系,为诊后管理做好技术支持。
上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是根据本发明实施例的一种应用于服务端的消息群发处理方法的主要流程示意图;
图2是根据本发明实施例的一种可选的应用于服务端的消息群发处理方法的流程示意图;
图3(a)为正向选择的操作形态图;
图3(b)为全选和反向选择的操作形态图;
图4是根据本发明实施例的另一种可选的应用于服务端的消息群发处理方法的流程示意图;
图5是数据库和对象存储服务的关系示意图:
图6是根据本发明实施例的又一种可选的应用于服务端的消息群发处理方法的流程示意图;
图7是异构存储批次群发记录和详细发送记录的示意图;
图8是根据本发明实施例的一种应用于客户端的消息群发处理方法的流程示意图;
图9是根据本发明实施例的一种应用于服务端的消息群发处理装置的主要模块示意图;
图10是根据本发明实施例的一种应用于客户端的消息群发处理装置的主要模块示意图;
图11是本发明实施例可以应用于其中的示例性***架构图;
图12是适于用来实现本发明实施例的移动设备或服务器的计算机***的结构示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
需要指出的是,在不冲突的情况下,本发明中的实施例以及实施例中的特征可以互相组合。本申请技术方案中对数据的获取、存储、使用、处理等均符合国家法律法规的相关规定。
互联网医院诊后管理场景中的IM***群发消息具备以下特征:
1)支持同时向多个患者发送消息:大多数医生累计诊后患者较多,随着互联网医疗的发展,单个医生的累计诊后患者还会增加,因此,单次群发给患者的并发量需提升。
2)用户体验高效便捷:一方面用户(如医生)能轻易地选择大量的患者,另一方面用户的操作能快速的得到响应。
3)消息发送的实时性好:在服务端收到群发消息请求后,需要尽快提交发送任务,并执行发送逻辑。
4)有明确的发送结果:基于诊后管理的重要性,要求群发给患者的每一个消息都要明确知道发送结果,且用户任何时候都能看到某次群发消息的发送状态及结果。
目前互联网医院的群发消息的方式有如下几种:
方式1、限定少量发送目标即时发送方式:用户在客户端应用选中发送目标后,通过网络将待发送的目标数据传送给服务端,服务端接收到发送请求后,依次遍历每个发送目标并完成查询会话信息、判断消息类型、构建发送参数等多个逻辑,最后发送给患者。在后端处理过程中,用户只能停留在发送页面等待发送结果。
方式2、限定较多发送目标异步发送方式:客户端应用将用户选中的目标数据通过网络传送给服务端。服务端先将发送请求数据保存到数据库中,随后响应客户端。此时,消息实际上还没有发送给患者,消息发送状态为未发送。后续由后端定时任务定时读取数据库中状态为未发送的群发消息任务开始发送,将消息发送状态更新为发送中。消息全部发送完成后更新为发送完成。
目前互联网医院的群发消息的方式所存在的技术问题包括:
1、方式1和方式2在操作流程上均需用户手动一个一个选择发送目标,有时还需手动翻页以获取新的发送目标再点击选择,当发送目标数量较多时,这种选择方式对用户不友好,只是选择发送目标就已占用用户很长时间,若出现异常时还需要重新选择,体验较差;
2、方式1依靠网络传输全部的发送目标,发送目标的多少受网络传输的限制,并且采用了同步的方式,客户端应用阻塞等待服务端器的发送结果,等待时间无法预估,用户无法及时得到响应。另外这种传输方式限制性较强、性能较差,不适于给上万人发送消息,不满足上述特征1)。
3、方式2使用异步发送的方式能尽快响应用户,但依然是网络传输全部的发送目标,比较消耗网络资源。另外使用数据库存取大量非结构化的发送目标比较占用资源,在读写操作时占用数据库连接时间较长,会降低数据库的整体性能。使用定时任务的方式也会使服务器CPU利用率不稳定,且发送消息的时效性也会受影响,因此不满足上述特征1)和2)。
4、有些主流IM应用每次支持群发的发送目标数量有限,如200人,而在互联网医疗诊后管理场景中医生对应的患者数量远大于此,因此无法满足需求。
对于本方案所涉及的词语,做解释如下:
1)数据库:按照数据结构来组织、存储和管理数据的仓库,如MySQL等。
2)消息中间件:基础数据结构中“先进先出”的一种数据结构。一般用来解决应用解耦,异步消息,流量削峰等问题,实现高性能,高可用,可伸缩和最终一致性架构。如JMQ等。
3)对象存储:是海量、安全、低成本、高可靠的云存储服务方案。本方案主要使用OSS(Object Storage Service,对象存储服务)作为对象存储服务器。
4)分布式锁:控制分布式***有序的去对共享资源进行操作,通过互斥来保持一致性。
参见图1,示出的是本发明实施例提供的一种应用于服务端消息群发处理方法的主要流程图,包括如下步骤:
S101:接收客户端传输的群发消息请求,根据请求参数中的过滤条件和待群发的消息内容,构建群发消息任务并发送至消息中间件;
S102:通过消费消息中间件的进程执行所述群发消息任务,以查找符合所述过滤条件的发送目标,向所述发送目标群发所述消息内容;
S103:根据对每个发送目标的消息发送结果,更新所述群发消息任务的消息群发结果,将所述消息群发结果返给客户端。
上述实施方式中,对于步骤S101,本方案适用于所有需要给大量发送目标群发消息的场景,如互联网医疗场景中医生给患者发送诊后信息、企业给招聘者发送招聘信息和招聘结果、老师给学生发送成绩单等;其中,所发送的消息可以完全相同,也可以针对不同的发送目标生成不同的消息,如创建包含替换字段的消息模板,可替换字段包括学生姓名、学生成绩和教师评语,调用包含这三个信息的数据库,以生成与每个学生对应的消息。
本方案主要以互联网医疗场景为例进行说明,其“发送目标”即为患者、“发送目标信息”即为患者信息,患者信息包括ID、名称、年龄、性别、标签等。诊后管理的目的是维护医患关系,可以发送患者文章、问卷调查、节日祝福语等,也可以针对不同患者生成不同的发送信息,如用药提醒。本方案可以支持医生同时向上万患者群发诊后消息,极大的提升了医生诊后管理患者的体验,提高了效率。
本方案支持一次群发上万个消息,用户使用客户端选择上万个发送目标,并提交群发消息请求给服务端,其中,客户端是用户使用的移动设备,如手机、PC(personalcomputer,个人计算机),属于前端。后端是与前端对应的概念,即服务端,本方案中的服务端包括前台服务和中台服务,为架构的分层,便于灵活扩展、且易维护。前台服务主要是接收客户端传输的请求并传递给下游服务(即中台服务)处理,处理个性化业务。中台服务主要提供通用能力和数据支持。
中台服务在收到前台服务传输的群发消息请求后,首先解析该群发消息请求中的请求参数,基于请求参数中的用户登陆ID,对该请求参数进行防重提交校验,例如,用户多次点击提交“群发消息请求”,因此服务端会收到该用户客户端传输的多个重复群发消息请求,通过防重提交校验,服务端仅处理一个群发消息请求。
在防重提交校验结果为通过的情况下,针对该群发消息请求生成发送记录并持久化到数据库中,发送记录包括该群发消息请求的发送状态和消息群发结果,由数据库支持消息发送状态的变更及群发消息历史记录的展示。自动为该发送记录创建消息批次号,例如医生想给1万个患者群发消息,这1万个患者组成一个批次。数据库字段包括:
表1
其中,数据主键Id不涉及业务属性,为***自动生成,本方案不涉及。请求参数包含LoginUserId~MsgContent,具体会在后续进行具体描述。OssUrl为发送目标在对象存储服务器中的存储地址,快照可保证进程重新消费处理时发送目标信息的一致性。
在防重提交校验结果为通过的情况下,还需根据请求参数中的过滤条件和消息内容,构建群发消息任务并发送到消息中间件中。另外,还会返回消息群发请求结果给客户端,告知用户该群发消息请求已收到,并已递交到消息中间件中,类似于“来信已知,已开始着手处理”。
对于步骤S102,消息中间件是独立存在的一个应用,其作用是暂存群发消息任务。群发消息请求到达服务端后,生成发送记录保存到了数据库,构建群发消息任务发送到消息中间件中,此时还没有向发送目标群发消息内容,实际群发消息内容的逻辑是中台服务中特定的进程,从消息中间件中获取群发消息任务并执行,以群发消息内容给发送目标的一个过程。
上述中台服务中特定的进程,不是消息中间件的进程,而是消费消息中间件的进程。因为接收群发消息请求和实际的消息发送不是同一个进程完成的,消息的发送是由消费消息中间件的进程完成的,使用消息中间件起到削峰填谷、缓冲的作用。
另外,为了保证整个实施过程的可靠性,消息中间件开启ACK(Acknowledgecharacter,确认字符,在TCP/IP协议中,如果接收方成功的接收到数据,那么会回复一个ACK数据)应答机制,如果本次消费处理失败,则可以重新消费处理。分布式架构下,为解决多线程处理环境下消息处理的并发问题,在处理前对群发消息任务加分布式锁,为了保证同一个任务不被重复处理,即保证幂等性。这里为减小***复杂度和提升***性能,优选采用基于缓存(Redis)的分布式锁。当前进程依据分布式锁确定待执行的群发消息任务,以进行下一步的逻辑处理,处理完成后释放锁。综上所述,实现任务处理失败后重试发送的功能,兼顾了***的稳定性和消息处理的时效性,可保证消息群发的可靠性和高性能。
对于步骤S103,服务端需要在有限的时间内及时响应用户:用户的操作需要得到明确的响应,表示服务端接收到了用户的操作请求,并进行了处理,产生了处理结果。如用户发送群发消息请求,响应就是消息群发结果:成功或者失败,这个结果需要由前台服务即时回传给用户,不能让用户长时间等待。
本方案优选使用异构存储消息数据的方式,将对每个发送目标的消息发送记录存储在ES(ElasticSearch)中,以提升检索的效率,将整个群发消息任务的发送记录存储在数据库中。根据对每个发送目标的消息发送结果,更新群发消息任务的消息群发结果。
可选的,本方案中的服务端还可以处理对历史发送记录的查询请求,请求参数中携带有用户登陆ID,如用户A登陆其账号查询的即为其历史群发过的发送记录,该查询过程同样由中台服务完成,所有的持久化数据都是中台服务操作的,中台服务查询到历史发送记录并返给前台服务,由前台服务返给客户端。
上述实施例所提供的方法,客户端不再将发送目标信息直接传输给服务端,而是将过滤条件传给服务端,由服务端自行查询,以此降低网络传输压力,解决了传输大数据的问题;在将任务传输到消息中间件后立即响应用户,整个请求响应过程平均耗时较短,不会让用户感到卡顿。
参见图2,示出了根据本发明实施例的一种可选的应用于服务端消息群发处理方法流程示意图,包括如下步骤:
S201:获取请求参数中的过滤条件;其中,过滤条件包括筛选字段、选择方式字段、发送目标标识,发送目标标识为正向选择的发送目标标识、或全选时取消选择的发送目标标识;
S202:查找符合所述筛选字段的所有发送目标,判断所述选择方式字段的键值是否为预设数值;
S203:若是,则确定选择方式为正向选择,将所有发送目标中与所述发送目标标识对应的发送目标,作为本次待群发消息的对象;
S204:若否,则确定选择方式为全选和反向选择,将所有发送目标中除所述发送目标标识外的剩余发送目标,作为本次待群发消息的对象。
上述实施方式中,对于步骤S201~S204,为了服务端能支持一次给上万甚至更多的发送目标群发消息的功能,本方案首先在传统选择发送目标和传输发送目标信息的基础上做出改进和优化,以解决现有网络传输成本高、性能低的问题。
1、对发送目标的选择方式
本方案用户在客户端选择发送目标的方式上,除了正向选择外,还支持全选和反向选择,即用户在全选状态下可以针对性的取消选择一些发送目标。参见图3(a)为正向选择的操作形态图,假设用户输入筛选条件后筛选到的发送目标的总数为9848个,可以点击选择发送目标1和发送目标2。参见图3(b)为全选和反向选择的操作形态图,假设用户输入筛选条件后筛选到的发送目标的总数为9848个,用户无需翻页,即可通过点击“全选”选项选中发送目标1至发送目标9848这9848个发送目标,还可以再取消选择发送目标2和发送目标3,此时仅群发消息给剩余的9846个发送目标。
2、客户端群发消息请求报文优化
由于发送目标列表在客户端是分页显示的,用户上滑页面以触发加载操作,每页加载一定数量的发送目标。在上述全选和反向选择的形态逻辑中,如何将这9846个发送目标的信息传输给服务端?一种方式是客户端一次性获取全部9848个发送目标的数据信息,做虚拟分页,在发送时把用户选中的全部9846个发送目标的信息传输到服务端,但这种方式会消耗大量的网络资源。以互联网医疗场景为例,一个患者的数据信息包括名称、性别、年龄、疾病信息、分类标签等十几个信息,以一个数据信息200Byte计算,9848个数据信息的大小约2M。因此一次性全选发送包括获取发送目标列表和发送目标信息两个步骤,消耗网络共计4M,显然这种方式的成本是极高的。
针对上述方式存在的成本问题,本方案设计一种新型传输方式,通过改进发送目标在网络传输的报文,将发送目标的筛选条件、取消选择的发送目标ID传输给服务端,由服务端自行查询符合该筛选条件的所有发送目标,并基于过滤取消选择的发送目标,从而得到最终的发送目标。这样客户端的发送目标列表展示还可以分页获取数据,以一页10条数据计算,发送内容和发送目标筛选条件按1K计算,发送9846个对象的网络消耗约3K,相比于上述方式发送成本大大降低。
改进的请求参数形式:
表2
字段 | 字段类型 | 说明 |
LoginUserId | String | 登录用户id |
CheckedTargets | Object[] | 选择的发送目标的列表 |
SendTargetTotal | Int | 发送目标总数 |
CheckedFlag | Int | 选择方式,1:全选,0:非全选 |
UncheckedTargetIds | String[] | 全选时取消选择的发送目标id |
SearchTargetCondition | String | 查询发送目标的参数,即筛选条件 |
MsgType | Int | 消息类型,1:文本,2:图片,3:卡片 |
MsgContent | String | 消息内容 |
相对现有形式,增加了CheckedFlag、UncheckedTargetIds、SearchTargetCondition这3个字段,客户端传输给前台服务的请求参数中,不再为具体的发送目标,而是对发送目标的过滤条件。前台服务可将接收自客户端的发送目标过滤条件透传给中台服务,由后端中台服务根据该过滤条件查询群发消息的具体发送目标。
对于非全选正向选择的请求参数示例如下,此时可以包含筛选条件,也可以不包含筛选条件,直接依据发送目标ID确定具体发送目标:
{
"LoginUserId":1,
"CheckedFlag":0(即预设数值),
"SendTargetTotal":2,
"CheckedTargetIds":[1212087838028,1212087838029],
"MsgType":1,
"MsgContent":"请按医嘱用药,及时复诊!"
}
对于全选和反向选择的请求参数示例如下:
{
"LoginUserId":1,
"CheckedFlag":1,
"SendTargetTotal":9848,
"UncheckedTargetIds":[1212087838028,1212087838029],
"SearchTargetCondition":"{\"patientSex\":\"男\"}",
"MsgType":1,
"MsgContent":"请按医嘱用药,及时复诊!"
}
上述实施例所提供的方法,过滤条件分正向选择、全选后的反向选择,以此实现多样性选择,避免用户一个一个选择,耗费人工时间过长的问题。
参见图4,示出了根据本发明实施例的另一种可选的应用于服务端消息群发处理方法流程示意图,包括如下步骤:
S401:解析群发消息任务的消息体,得到消息批次号和请求参数,将所述请求参数转换为群发消息对象;其中,在数据库中创建发送记录的消息批次号,发送记录与群发消息请求对应,包括发送状态;
S402:根据所述消息批次号查询数据库,得到所述群发消息对象的发送状态,在发送状态为未发送的情况下,查找符合所述过滤条件的发送目标,以获取与每个发送目标标识对应的发送目标信息;
S403:将发送目标信息上传到对象存储服务器中作为快照,以基于所述快照向每个发送目标发送所述消息内容;其中,快照用于保证重新消费处理时发送目标信息的一致性。
上述实施方式中,对于步骤S401~S402,服务端在接收到客户端的群发消息请求后需快速响应,这时对于大量的发送目标同步实时发送是无法做到快速响应的。为了能快速响应,可以先将群发消息请求的发送记录保存到数据库中,再构建群发消息任务到分布式高性能消息中间件中,后续实时从消息中间件中拉取群发消息任务并异步处理,此时可以直接响应用户,表示群发消息任务已提交并开始。
根据前述数据库字段,可知群发消息任务的主题消息体格式如下(数值仅为示例):
{
"Id":1212343568,
"BatchId":"364166e9",
"LoginUserId":1,
"SendTargetTotal":9848,
"CheckedFlag":1,
"UncheckedTargetIds":[],
"SearchTargetCondition":"{\"patientSex\":\"男\"}",
"MsgType":1,
"MsgContent":"请按医嘱用药,及时复诊!"
}
使用指定的程序进程监听消息中间件中群发消息任务的主题消息体,并不断拉取主题消息体中的消息批次号和请求参数,以将JSON格式的请求参数转化为群发消息对象。根据消息批次号查询数据库中的发送记录:
1、若查询结果为不存在,则说明该群发消息对象无效,无需处理。
2、若查到发送记录,则检查其发送状态,如果是已发送的则无需处理,如果是未发送的则进行之后逻辑处理,如查找符合过滤条件的发明目标。
对于步骤S403,在前述数据库表字段设计中,并没有直接存储具体的发送目标信息,因为具体的发送目标信息的数据大小和用户选择的发送目标数量多少有关,选择几个发送目标的数据大小只有几十字节,但当选择上万个发送目标时数据大小会达到兆级别。如果把该数据直接存储在数据库中会占用大量宝贵资源,并且严重影响数据库的性能。
首次操作时,会根据发明目标ID获取每个发明目标的信息,将发明目标信息存储在对象存储服务器中作为快照,以保证重试处理时发送目标信息的一致性,数据库只存储快照地址。数据库只关心消息群发结果,无需关心选择发送目标的方式和传输方式,减少了数据库存储的复杂度,提升了存储和查询性能,数据库与对象存储服务器关系参见图5所示。其中,快照:关于指定数据集合的一个完全可用拷贝,该拷贝包括相应数据在某个时间点(拷贝开始的时间点)的映像,快照可以是其所表示的数据的一个副本,也可以是数据的一个复制品。
在该步骤中,首先检查群发消息对象中是否有发送目标信息的快照存储地址(ossUrl字段),若没有,则表示为首次操作,需根据过滤条件查找具体发送目标,检索每个发送目标信息并一同上传到对象存储服务器作为快照,获取存储地址并持久化到数据库的发送记录中。若有,则直接依据该存储地址从对象存储服务器中获取该快照。
需要说明的是,发送目标信息首先会存储到对象存储服务器中,后续实际群发消息时都是基于对象存储服务器中存储的发送目标信息发送的,发送过程有可能异常,异常后需要重新发送,重新发送的发送目标信息也是基于对象存储服务器的快照,以确保重新发送时的发送目标还是原来的发送目标,实现一致性。
上述实施例所提供的方法,本次所请求群发的所有发送目标的信息,存储在一个快照里,即使异常后重新处理,也是使用该快照进行处理,保证发送目标信息的一致性。
参见图6,示出了根据本发明实施例的另一种可选的应用于服务端消息群发处理方法流程示意图,包括如下步骤:
S601:获取请求参数中的发送目标总数量,计算发送目标总数量与子任务可处理的发送目标数量的商,对所述商向上取整,得到取整后的多个子任务;
S602:使用线程池中的线程并行执行所述多个子任务,以基于快照向每个发送目标发送所述消息内容;
S603:每执行完一个子任务,根据对子任务中每个发送目标的消息发送结果,更新所述一个子任务的消息群发结果,在执行完所有子任务后,更新群发消息任务的消息群发结果。
上述实施方式中,对于步骤S601~S603,发送目标数量通常上万,因而同时给上万个发送目标发送消息压力过大,本方案将群发消息任务拆分为多个子任务,每个子任务处理一定数量的发送目标。
如一共9846个发送目标,每个子任务处理90个发送目标,9846/90=109.4,向上取整为110,即需要将群发消息任务拆分为110个子任务。后续可以使用线程池中的线程并行执行这110个子任务,同一时间可以同时发送110个消息。或者,根据线程池中可用线程的数量确定可拆分的子任务数量,以将发送目标均分至这些子任务中。
为了保证消息检索的性能,整个批次群发消息请求的发送记录和对每个发送目标的消息发送记录,存储在不同的数据存储组件中,参见图7所示。群发消息请求的发送记录存储在数据库中,对应数据库中一条数据。对每个发送目标的消息发送记录存储在ES中,如上述举例,一个批次的发送记录对应ES中9846条消息发送记录。
中台服务在并行执行子任务时,将对每个发送目标的消息发送记录保存到ES中,消息发送记录包括消息发送结果,消息发送结果为发送成功或发送失败。如果整个批次的消息都执行完成,则更新数据库发送状态Status字段为完成,并统计ES中消息发送结果为成功的消息数,然后更新数据库中发送成功数(SendSuccessNum)字段。后续用户可以查看具体的发送情况,若一次给30000个患者群发消息,发送成功的数量为28000个。
上述实施例所提供的方法,为降低服务端的服务压力,将一个群发消息任务拆分为多个子任务,并行执行这多个子任务,提高同时发送消息给多个发送目标的吞吐量;对于群发消息任务的发送记录存储在数据库里,但是对于每个发送目标的发送结果则存储在ES里,以此提升后续检索的效率。
参见图8,示出了根据本发明实施例的一种应用于客户端的消息群发处理方法流程示意图,包括如下步骤:
S801:接收用户输入的筛选条件和消息内容,查找符合所述筛选条件的所有发送目标;
S802:接收用户使用正向选择方式对多个发送目标的选择操作;
S803:接收用户在全选状态下,对一个或多个发送目标的取消选择操作;
S804:响应于用户对群发消息选项的选择操作,根据筛选字段、选择方式字段、发送目标标识,生成过滤条件,结合所述消息内容,得到请求参数;其中,发送目标标识为正向选择的发送目标标识、或全选时取消选择的发送目标标识;
S805:基于所述请求参数生成群发消息请求并传输给服务端,之后接收服务端反馈的消息群发结果并进行显示。
上述实施方式中,对于步骤S801~S805,同样参见图3(a)和图3(b),假设用户输入筛选条件后筛选到的发送目标的总数为9848个,若使用图3(a)方式,用户可以点击选择发送目标1和发送目标2,若使用图3(b)方式,用户无需翻页,即可通过点击“全选”选项选中发送目标1至发送目标9848这9848个发送目标,还可以再取消选择发送目标2和发送目标3,此时仅群发消息给剩余的9846个发送目标。
后续页面会根据用户的具体选择方式,确定选择方式字段的键值,如0或1,0表示为正向选择方式,1表示全选和取消选择方式。根据输入的筛选条件,确定筛选字段的键值,如patientSex为男。根据用户具体选择的发明目标ID、选择方式字段、筛选字段、用户登陆ID、待群发的消息内容(如文本、图片等),生成请求参数,进而生成群发消息请求给服务端。
服务端最终返回的消息群发结果,可以包含发送状态、发送成功的数量、具体哪些发送目标发送失败等。另外,服务端在生成群发消息任务给消息中间件后,可以生成消息群发请求结果给客户端,告知客户端请求已收到并开始处理。
对于正向选择的请求参数示例如下,此时可以包含筛选条件,也可以不包含筛选条件,直接依据发送目标ID确定具体发送目标:
{
"LoginUserId":1,
"CheckedFlag":0(即预设数值),
"SendTargetTotal":2,
"CheckedTargetIds":[1212087838028,1212087838029],
"MsgType":1,
"MsgContent":"请按医嘱用药,及时复诊!"
}
对于全选和反向选择的请求参数示例如下:
{
"LoginUserId":1,
"CheckedFlag":1,
"SendTargetTotal":9848,
"UncheckedTargetIds":[1212087838028,1212087838029],
"SearchTargetCondition":"{\"patientSex\":\"男\"}",
"MsgType":1,
"MsgContent":"请按医嘱用药,及时复诊!"
}
上述实施例所提供的方法,将发送目标的过滤条件传输给服务端,由服务端自行查找符合该过滤条件的所有发送目标,相比于现有客户端将发送目标列表和发送目标信息直接传输给服务端的方式,大大降低网络传输成本,解决了客户端给服务端传输大数据的问题。
群发消息问题涉及到用户操作及响应、大数据网络传输、大任务处理性能等多个关键要素,因而需要从操作方式、数据传输、数据存储、任务执行、状态更新等多个方面考虑,本发明实施例所提供的方法相对于现有技术,至少存在如下有益效果:
1、改进传输请求参数:客户端不再将发送目标信息直接传输给服务端,而是将过滤条件传给服务端,由服务端自行查询确定发送目标,简化客户端群发消息请求数据传输方式,以此降低网络传输压力和消耗;
2、过滤条件分正向过滤、全选后的反向过滤,以此实现多样性选择,避免用户一个一个选择,耗费人工时间过长的问题;
3、本次所请求群发的所有发送目标的信息,上传到对象存储服务器作为快照,即使异常后重新处理也使用这个快照处理,保证发送目标信息的一致性和查找性能;
4、将一个群发消息任务拆分为多个子任务并灵活调度、并发执行,提高同时发送给多个发送目标的吞吐量,保证消息触达的时效性;
5、异构存储批次群发记录和详细发送记录,对于群发消息任务的发送记录存储在数据库里,但是对于每个发送目标的发送结果则存储在ES里,以此提升消息记录检索性能。
6、设有防重提交校验机制,当用户点击群发消息按钮多次,***通过防重提交校验,只需执行一次即可;服务端接收到群发消息请求后持久化请求并发送到消息中间件,随即响应用户,用户可在100ms短时间内得到响应结果;
7、消息中间件有应答机制,在本次消费群发消息任务失败时,可以自动重新执行消费操作,可靠性好。
参见图9,示出了本发明实施例提供的一种应用于服务端的消息群发处理装置900的主要模块示意图,包括:
接收模块901,用于接收客户端传输的群发消息请求,根据请求参数中的过滤条件和待群发的消息内容,构建群发消息任务并发送至消息中间件;
群发模块902,用于通过消费消息中间件的进程执行所述群发消息任务,以查找符合所述过滤条件的发送目标,向所述发送目标群发所述消息内容;
更新模块903,用于根据对每个发送目标的消息发送结果,更新所述群发消息任务的消息群发结果,将所述消息群发结果返给客户端。
本发明实施装置中,所述群发模块902,用于:
解析所述群发消息任务的消息体,得到消息批次号和所述请求参数,将所述请求参数转换为群发消息对象;
根据所述消息批次号查询数据库,得到所述群发消息对象的发送状态,在发送状态为未发送的情况下,查找符合所述过滤条件的发送目标,以获取与每个发送目标标识对应的发送目标信息;
将发送目标信息上传到对象存储服务器中作为快照,以基于所述快照向每个发送目标发送所述消息内容;其中,快照用于保证重新消费处理时发送目标信息的一致性。
本发明实施装置中,所述过滤条件包括筛选字段、选择方式字段、发送目标标识,发送目标标识为正向选择的发送目标标识、或全选时取消选择的发送目标标识;
所述群发模块902,用于:
查找符合所述筛选字段的所有发送目标,判断所述选择方式字段的键值是否为预设数值;
若是,则确定选择方式为正向选择,将所有发送目标中与所述发送目标标识对应的发送目标,作为本次待群发消息的对象;或
若否,则确定选择方式为全选和反向选择,将所有发送目标中除所述发送目标标识外的剩余发送目标,作为本次待群发消息的对象。
本发明实施装置中,所述群发模块902,还用于:
确定所述快照在所述对象存储服务器中的存储地址,将所述存储地址存储到数据库的所述发送记录中;以及
响应于重新消费处理操作,在发送状态为未完成的情况下,根据所述消息批次号从数据库中获取所述存储地址,以基于所述存储地址从所述对象存储服务器中获取所述快照。
本发明实施装置中,所述请求参数还包括发送目标总数量,所述群发模块902,还用于:
计算所述发送目标总数量与子任务可处理的发送目标数量的商,对所述商向上取整,得到取整后的多个子任务;
使用线程池中的线程并行执行所述多个子任务,以基于所述快照向每个发送目标发送所述消息内容;
所述更新模块903,用于:
每执行完一个子任务,根据对子任务中每个发送目标的消息发送结果,更新所述一个子任务的消息群发结果,在执行完所有子任务后,更新所述群发消息任务的消息群发结果。
本发明实施装置中,所述更新模块903,还用于:
将对每个发送目标的消息发送记录,存储到指定数据存储组件中;其中,消息发送记录包括消息发送结果,消息发送结果为发送成功或发送失败;以及
统计所述数据存储组件中消息发送结果为成功的消息发送记录数量,将所述发送记录的发送成功数量字段的键值,更改为所述消息发送记录数量。
本发明实施装置中,所述请求参数还包括用户登陆标识;
所述接收模块,用于:
根据所述用户登陆标识,对所述请求参数进行防重提交校验;
响应于校验结果为通过,针对所述群发消息请求生成发送记录,将所述发送记录持久化到数据库中;其中,发送记录包括发送状态和消息群发结果;以及
根据所述请求参数中的过滤条件和待群发的消息内容,构建所述群发消息任务并发送到消息中间件中。
本发明实施装置中,所述群发模块902,还用于:
根据消息中间件的应答机制,若本次消费处理失败,则执行重新消费操作;以及
对所述群发消息任务加分布式锁,消费消息中间件的进程依据所述分布式锁执行所述群发消息任务,并在处理完成后释放所述分布式锁。
本发明实施装置中,在所述构建群发消息任务并发送到消息中间件中的同时,还包括:返回消息群发请求结果给客户端。
参见图10,示出了本发明实施例提供的一种应用于客户端的消息群发处理装置1000的主要模块示意图,包括:
操作模块1001,用于接收用户输入的筛选条件和消息内容,查找符合所述筛选条件的所有发送目标,以接收用户对多个发送目标的选择操作;
生成模块1002,用于响应于用户对群发消息选项的选择操作,根据筛选字段、选择方式字段、发送目标标识,生成过滤条件,结合所述消息内容,得到请求参数;其中,发送目标标识为正向选择的发送目标标识、或全选时取消选择的发送目标标识;
传输模块1003,用于基于所述请求参数生成群发消息请求并传输给服务端,之后接收服务端反馈的消息群发结果并进行显示。
本发明实施装置中,所述操作模块1001,用于:
接收用户使用正向选择方式对多个发送目标的选择操作;或
接收用户在全选状态下,对一个或多个发送目标的取消选择操作。
本发明实施装置中,在所述接收服务端反馈的消息群发结果并显示之前,还包括:接收服务端返回的消息群发请求结果并进行显示。
另外,在本发明实施例中所述装置的具体实施内容,在上面所述方法中已经详细说明了,故在此重复内容不再说明。
图11示出了可以应用本发明实施例的示例性***架构1100,包括终端设备1101、1102、1103,网络1104和服务器1105(仅仅是示例)。
终端设备1101、1102、1103可以是具有显示屏并且支持网页浏览的各种电子设备,安装有各种通讯客户端应用,用户可以使用终端设备1101、1102、1103通过网络1104与服务器1105交互,以接收或发送消息等。
网络1104用以在终端设备1101、1102、1103和服务器1105之间提供通信链路的介质。网络1104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
服务器1105可以是提供各种服务的服务器,需要说明的是,本发明实施例所提供的方法一般由服务器1105执行,相应地,装置一般设置于服务器1105中。
应该理解,图11中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
下面参考图12,其示出了适于用来实现本发明实施例的终端设备的计算机***1200的结构示意图。图12示出的终端设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图12所示,计算机***1200包括中央处理单元(CPU)1201,其可以根据存储在只读存储器(ROM)1202中的程序或者从存储部分1208加载到随机访问存储器(RAM)1203中的程序而执行各种适当的动作和处理。在RAM 1203中,还存储有***1200操作所需的各种程序和数据。CPU 1201、ROM 1202以及RAM 1203通过总线1204彼此相连。输入/输出(I/O)接口1205也连接至总线1204。
以下部件连接至I/O接口1205:包括键盘、鼠标等的输入部分1206;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分1207;包括硬盘等的存储部分1208;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分1209。通信部分1209经由诸如因特网的网络执行通信处理。驱动器1210也根据需要连接至I/O接口1205。可拆卸介质1211,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1210上,以便于从其上读出的计算机程序根据需要被安装入存储部分1208。
特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分1209从网络上被下载和安装,和/或从可拆卸介质1211被安装。在该计算机程序被中央处理单元(CPU)1201执行时,执行本发明的***中限定的上述功能。
需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行***、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本发明各种实施例的***、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括接收模块、群发模块、更新模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,群发模块还可以被描述为“群发消息模块”。
作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备执行上述任一所述的消息群发处理方法。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
Claims (16)
1.一种消息群发处理方法,应用于服务端,其特征在于,包括:
接收客户端传输的群发消息请求,根据请求参数中的过滤条件和待群发的消息内容,构建群发消息任务并发送至消息中间件;
通过消费消息中间件的进程执行所述群发消息任务,以查找符合所述过滤条件的发送目标,向所述发送目标群发所述消息内容;
根据对每个发送目标的消息发送结果,更新所述群发消息任务的消息群发结果,将所述消息群发结果返给客户端。
2.根据权利要求1所述的方法,其特征在于,所述查找符合所述过滤条件的发送目标,向所述发送目标群发所述消息内容,包括:
解析所述群发消息任务的消息体,得到消息批次号和所述请求参数,将所述请求参数转换为群发消息对象;
根据所述消息批次号查询数据库,得到所述群发消息对象的发送状态,在发送状态为未发送的情况下,查找符合所述过滤条件的发送目标,以获取与每个发送目标标识对应的发送目标信息;
将发送目标信息上传到对象存储服务器中作为快照,以基于所述快照向每个发送目标发送所述消息内容;其中,快照用于保证重新消费处理时发送目标信息的一致性。
3.根据权利要求1或2所述的方法,其特征在于,所述过滤条件包括筛选字段、选择方式字段、发送目标标识,发送目标标识为正向选择的发送目标标识、或全选时取消选择的发送目标标识;
所述查找符合所述过滤条件的发送目标,包括:
查找符合所述筛选字段的所有发送目标,判断所述选择方式字段的键值是否为预设数值;
若是,则确定选择方式为正向选择,将所有发送目标中与所述发送目标标识对应的发送目标,作为本次待群发消息的对象;或
若否,则确定选择方式为全选和反向选择,将所有发送目标中除所述发送目标标识外的剩余发送目标,作为本次待群发消息的对象。
4.根据权利要求2所述的方法,其特征在于,还包括:
确定所述快照在所述对象存储服务器中的存储地址,将所述存储地址存储到数据库的所述发送记录中;以及
响应于重新消费处理操作,在发送状态为未完成的情况下,根据所述消息批次号从数据库中获取所述存储地址,以基于所述存储地址从所述对象存储服务器中获取所述快照。
5.根据权利要求2或4所述的方法,其特征在于,所述请求参数还包括发送目标总数量,所述向所述发送目标群发所述消息内容,还包括:
计算所述发送目标总数量与子任务可处理的发送目标数量的商,对所述商向上取整,得到取整后的多个子任务;
使用线程池中的线程并行执行所述多个子任务,以基于所述快照向每个发送目标发送所述消息内容;
所述根据对每个发送目标的消息发送结果,更新所述群发消息任务的消息群发结果,包括:
每执行完一个子任务,根据对子任务中每个发送目标的消息发送结果,更新所述一个子任务的消息群发结果,在执行完所有子任务后,更新所述群发消息任务的消息群发结果。
6.根据权利要求5所述的方法,其特征在于,还包括:
将对每个发送目标的消息发送记录,存储到指定数据存储组件中;其中,消息发送记录包括消息发送结果,消息发送结果为发送成功或发送失败;以及
统计所述数据存储组件中消息发送结果为成功的消息发送记录数量,将所述发送记录的发送成功数量字段的键值,更改为所述消息发送记录数量。
7.根据权利要求1或2所述的方法,其特征在于,所述请求参数还包括用户登陆标识;
所述根据请求参数中的过滤条件和待群发的消息内容,构建群发消息任务并发送至消息中间件,包括:
根据所述用户登陆标识,对所述请求参数进行防重提交校验;
响应于校验结果为通过,针对所述群发消息请求生成发送记录,将所述发送记录持久化到数据库中;其中,发送记录包括发送状态和消息群发结果;以及
根据所述请求参数中的过滤条件和待群发的消息内容,构建所述群发消息任务并发送到消息中间件中。
8.根据权利要求1或2所述的方法,其特征在于,所述通过消费消息中间件的进程执行所述群发消息任务,还包括:
根据消息中间件的应答机制,若本次消费处理失败,则执行重新消费操作;以及
对所述群发消息任务加分布式锁,消费消息中间件的进程依据所述分布式锁执行所述群发消息任务,并在处理完成后释放所述分布式锁。
9.根据权利要求8所述的方法,其特征在于,在所述构建群发消息任务并发送到消息中间件中的同时,还包括:返回消息群发请求结果给客户端。
10.一种消息群发处理方法,应用于客户端,其特征在于,包括:
接收用户输入的筛选条件和消息内容,查找符合所述筛选条件的所有发送目标,以接收用户对多个发送目标的选择操作;
响应于用户对群发消息选项的选择操作,根据筛选字段、选择方式字段、发送目标标识,生成过滤条件,结合所述消息内容,得到请求参数;其中,发送目标标识为正向选择的发送目标标识、或全选时取消选择的发送目标标识;
基于所述请求参数生成群发消息请求并传输给服务端,之后接收服务端反馈的消息群发结果并进行显示。
11.根据权利要求10所述的方法,其特征在于,所述接收用户对多个发送目标的选择操作,包括:
接收用户使用正向选择方式对多个发送目标的选择操作;或
接收用户在全选状态下,对一个或多个发送目标的取消选择操作。
12.根据权利要求10或11所述的方法,其特征在于,在所述接收服务端反馈的消息群发结果并显示之前,还包括:接收服务端返回的消息群发请求结果并进行显示。
13.一种消息群发处理装置,应用于服务端,其特征在于,包括:
接收模块,用于接收客户端传输的群发消息请求,根据请求参数中的过滤条件和待群发的消息内容,构建群发消息任务并发送至消息中间件;
群发模块,用于通过消费消息中间件的进程执行所述群发消息任务,以查找符合所述过滤条件的发送目标,向所述发送目标群发所述消息内容;
更新模块,用于根据对每个发送目标的消息发送结果,更新所述群发消息任务的消息群发结果,将所述消息群发结果返给客户端。
14.一种消息群发处理装置,应用于客户端,其特征在于,包括:
操作模块,用于接收用户输入的筛选条件和消息内容,查找符合所述筛选条件的所有发送目标,以接收用户对多个发送目标的选择操作;
生成模块,用于响应于用户对群发消息选项的选择操作,根据筛选字段、选择方式字段、发送目标标识,生成过滤条件,结合所述消息内容,得到请求参数;其中,发送目标标识为正向选择的发送目标标识、或全选时取消选择的发送目标标识;
传输模块,用于基于所述请求参数生成群发消息请求并传输给服务端,之后接收服务端反馈的消息群发结果并进行显示。
15.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-12中任一所述的方法。
16.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-12中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210391976.0A CN114785749B (zh) | 2022-04-14 | 2022-04-14 | 一种消息群发处理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210391976.0A CN114785749B (zh) | 2022-04-14 | 2022-04-14 | 一种消息群发处理方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114785749A true CN114785749A (zh) | 2022-07-22 |
CN114785749B CN114785749B (zh) | 2024-07-16 |
Family
ID=82429409
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210391976.0A Active CN114785749B (zh) | 2022-04-14 | 2022-04-14 | 一种消息群发处理方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114785749B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115334466A (zh) * | 2022-08-15 | 2022-11-11 | 北京泰迪熊移动科技有限公司 | 一种消息的发送方法、装置、电子设备及存储介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1968442A (zh) * | 2006-04-14 | 2007-05-23 | 华为技术有限公司 | ******及***方法 |
US20070162457A1 (en) * | 2006-01-06 | 2007-07-12 | Roland Barcia | Apparatus for sending a sequence of asynchronous messages to the same member of a clustered consumer |
CN101183377A (zh) * | 2007-12-10 | 2008-05-21 | 华中科技大学 | 一种基于消息中间件的高可用性数据库集群 |
CN102209084A (zh) * | 2010-03-30 | 2011-10-05 | 华为终端有限公司 | 一种推送消息的处理方法、装置和通信*** |
CN110753129A (zh) * | 2019-10-29 | 2020-02-04 | 深圳前海微众银行股份有限公司 | 消息传输方法、***、装置、设备及计算机可读存储介质 |
CN111198769A (zh) * | 2018-11-16 | 2020-05-26 | 北京京东金融科技控股有限公司 | 信息处理方法及其***、计算机***及计算机可读介质 |
CN111666162A (zh) * | 2020-04-30 | 2020-09-15 | 平安科技(深圳)有限公司 | 分布式消息传输方法、装置、计算机设备及存储介质 |
CN112311868A (zh) * | 2020-10-27 | 2021-02-02 | 上海淇馥信息技术有限公司 | 消息触达方法、装置和电子设备 |
CN114124861A (zh) * | 2020-08-28 | 2022-03-01 | 腾讯科技(深圳)有限公司 | 消息群发方法、装置、计算机设备和存储介质 |
-
2022
- 2022-04-14 CN CN202210391976.0A patent/CN114785749B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070162457A1 (en) * | 2006-01-06 | 2007-07-12 | Roland Barcia | Apparatus for sending a sequence of asynchronous messages to the same member of a clustered consumer |
CN1968442A (zh) * | 2006-04-14 | 2007-05-23 | 华为技术有限公司 | ******及***方法 |
CN101183377A (zh) * | 2007-12-10 | 2008-05-21 | 华中科技大学 | 一种基于消息中间件的高可用性数据库集群 |
CN102209084A (zh) * | 2010-03-30 | 2011-10-05 | 华为终端有限公司 | 一种推送消息的处理方法、装置和通信*** |
CN111198769A (zh) * | 2018-11-16 | 2020-05-26 | 北京京东金融科技控股有限公司 | 信息处理方法及其***、计算机***及计算机可读介质 |
CN110753129A (zh) * | 2019-10-29 | 2020-02-04 | 深圳前海微众银行股份有限公司 | 消息传输方法、***、装置、设备及计算机可读存储介质 |
CN111666162A (zh) * | 2020-04-30 | 2020-09-15 | 平安科技(深圳)有限公司 | 分布式消息传输方法、装置、计算机设备及存储介质 |
CN114124861A (zh) * | 2020-08-28 | 2022-03-01 | 腾讯科技(深圳)有限公司 | 消息群发方法、装置、计算机设备和存储介质 |
CN112311868A (zh) * | 2020-10-27 | 2021-02-02 | 上海淇馥信息技术有限公司 | 消息触达方法、装置和电子设备 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115334466A (zh) * | 2022-08-15 | 2022-11-11 | 北京泰迪熊移动科技有限公司 | 一种消息的发送方法、装置、电子设备及存储介质 |
CN115334466B (zh) * | 2022-08-15 | 2023-08-04 | 北京泰镝科技股份有限公司 | 一种消息的发送方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN114785749B (zh) | 2024-07-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11216430B2 (en) | Next generation near real-time indexing | |
CN109189835B (zh) | 实时生成数据宽表的方法和装置 | |
US8983902B2 (en) | Transparent caching of configuration data | |
US8818940B2 (en) | Systems and methods for performing record actions in a multi-tenant database and application system | |
EP3244312A1 (en) | A personal digital assistant | |
US8762408B2 (en) | Optimizing software applications | |
US20140032593A1 (en) | Systems and methods to process a query with a unified storage interface | |
US20120158655A1 (en) | Non-relational function-based data publication for relational data | |
CN113127564B (zh) | 一种参数同步方法和装置 | |
US10755362B2 (en) | Escrow personalization system | |
CN117413289A (zh) | 相关消息线程的受控显示 | |
CN114785749B (zh) | 一种消息群发处理方法和装置 | |
CN115185787A (zh) | 处理事务日志的方法及装置 | |
CN112579897B (zh) | 信息搜索方法和装置 | |
US11269856B2 (en) | Methods, apparatuses, and systems for ingesting and consuming data utilizing a trading partner manager | |
CN113986936A (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
CN116701445A (zh) | 资源匹配信息生成方法、装置、设备和计算机可读介质 | |
US20220100740A1 (en) | Systems and methods for automatically creating and/or managing electronic data tables | |
WO2015115035A1 (ja) | ソーシャルネットワークサーバ、画面表示方法および記録媒体 | |
US20150006690A1 (en) | Feature set negotiation framework | |
CN112988806A (zh) | 一种数据处理的方法及装置 | |
EP3369069A1 (en) | Escrow personalization system | |
EP4407459A1 (en) | Intelligent automated way of creating mapping programs using historical messages | |
US20240095109A1 (en) | Asynchronous prediction in machine learning model serving | |
CN112181937B (zh) | 一种结转数据的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant |