CN111147355B - 消息发送方法、装置、电子设备及存储介质 - Google Patents
消息发送方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN111147355B CN111147355B CN201911359932.4A CN201911359932A CN111147355B CN 111147355 B CN111147355 B CN 111147355B CN 201911359932 A CN201911359932 A CN 201911359932A CN 111147355 B CN111147355 B CN 111147355B
- Authority
- CN
- China
- Prior art keywords
- message
- sent
- sending
- messages
- public platform
- 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.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/50—Queue scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
-
- 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)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明公开了一种消息发送方法、装置、电子设备及存储介质,能够利用消息模板获取待发送消息,再将待发送消息依次存入Redis消息队列中;然后分别将Redis消息队列中预设数量的待发送消息依次插入Mysql数据库中,以避免大量消息数据同时写入Mysql数据库,造成的Mysql数据库写入压力大的问题;最后调用微信消息发送接口将Mysql数据库中的所述待发送消息分批发送给微信公众平台的用户,以及在待发送消息被发送给用户之后其状态会根据消息发送结果被更改,以便消息发送操作的发起方能够准确掌握每一个待发送消息的发送情况。
Description
技术领域
本发明涉及软件开发技术领域,尤其涉及消息发送方法、装置、电子设备及存储介质。
背景技术
微信公众平台是一种一对多的媒体活动,商家可以通过申请微信服务号获得微信公众平台的展示服务和向订阅用户发送消息的服务。微信公众平台已经形成了一种主流的线上线下微信互动营销方式。
目前,商家对应的应用软件多是将需要发布的消息写入Mysql(关系型数据库管理系统)数据库中,然后由应用软件所在的客户端直接调用微信公众平台的模板消息接口、客服消息接口、订阅消息接口或者小程序服务通知接口分别将Mysql数据库中对应的消息向微信公众平台或者订阅用户发送。
然而,上述这种基于微信公众平台的消息发送方法,由于预先需要将所有要发布的消息全部都写入Mysql数据库中,使得Mysql数据库所承受的写入压力较大;另外,Mysql数据库中的消息实时更新写入的,如果Mysql数据库的消息已经占用了全部的空间,当有新的消息需要写入时,新的消息会覆盖旧的消息,以至于应用软件无法知道旧的消息是否发送成功,所以这种消息发送方法也使得应用软件无法准确掌握消息的发送状态。
发明内容
本发明提供了一种消息发送方法、装置、电子设备及存储介质,以解决目前消息发送方法使得Mysql数据库所承受的写入压力较大以及应用软件无法准确掌握消息的发送状态的问题。
第一方面,本发明提供了一种消息发送方法,包括:
获取待发送消息,所述待发送消息为利用消息模板填入消息内容生成的消息;
将所述待发送消息依次存入Redis消息队列中;
分别将所述Redis消息队列中预设数量的所述待发送消息插入Mysql数据库中;
调用微信消息发送接口将所述Mysql数据库中的所述待发送消息分批发送给微信公众平台的用户,所述微信消息发送接口为客户端中微信公众平台向用户发送消息的接口,以及,所述待发送消息在被发送给用户之后其状态会根据消息发送结果被更改。
结合第一方面,在第一方面的一种可实现方式中,所述获取待发送消息的步骤包括:
获取微信公众平台的消息传入接口,所述消息传入接口为客户端中应用软件向所述微信公众平台传入消息的接口;
将不同类型的所述消息传入接口封装为统一的消息传入接口;
利用所述统一的消息传入接口获取待发送消息。
结合第一方面,在第一方面的一种可实现方式中,在所述获取待发送消息之前,还包括:
针对客户端中应用软件发送消息的类型生成不同的消息模板;
将所述应用软件发送消息的内容在对应的消息模板中填入,生成待发送消息。
结合第一方面,在第一方面的一种可实现方式中,所述Mysql数据库有两个,每一个Mysql数据库保存一个月内发送的消息,两个Mysql数据库交替进行保存,以及,每一个Mysql数据库中的消息以若干数据表的形式保存。
结合第一方面,在第一方面的一种可实现方式中,所述调用微信消息发送接口将所述Mysql数据库中的所述待发送消息分批发送给微信公众平台的用户的步骤包括:
将当前使用的所述Mysql数据库中第一个数据表中的每一个待发送消息发送给微信公众平台的用户;
获取所述微信公众平台返回的每一个待发送消息的消息发送结果,所述消息发送结果用于表示所述待发送消息是否发送成功;
根据所述消息发送结果对当前发送的数据表中的每一个待发送消息的状态进行更改;
继续将所述Mysql数据库中下一个数据表中的每一个待发送消息发送给微信公众平台的用户,直至所述Mysql数据库中的所有数据表中的所有待发送消息的状态全部进行了更改。
结合第一方面,在第一方面的一种可实现方式中,所述调用微信消息发送接口将所述Mysql数据库中的所述待发送消息分批发送给微信公众平台的用户的步骤还包括:
在将所述Mysql数据库中每一个数据表中的每一个待发送消息发送给微信公众平台的用户之前,为所述每一个数据表分配一个分布式锁,所述分布式锁用于控制所述数据表中的数据资源被占用的情况;
在对当前发送的数据表中的每一个待发送消息的状态进行更改之后,解除所述数据表对应的分布式锁。
结合第一方面,在第一方面的一种可实现方式中,在所述调用微信消息发送接口将所述Mysql数据库中的所述待发送消息分批发送给微信公众平台的用户之后,还包括:
在预设时间点检查所述Mysql数据库中的待重发消息,所述待重发消息是指状态为未发送和发送超时的消息;
将所述待重发消息重新通过调用微信消息发送接口发送给微信公众平台的用户;
根据微信公众平台返回的每一个所述待重发消息的消息发送结果,对每一个所述待重发消息的状态进行更改。
第二方面,本发明提供了一种消息发送装置,包括:
消息获取模块,用于获取待发送消息,所述待发送消息为利用消息模板填入消息内容生成的消息;
第一消息保存模块,用于将所述待发送消息依次存入Redis消息队列中;
第二消息保存模块,用于分别将所述Redis消息队列中预设数量的所述待发送消息插入Mysql数据库中;
消息发送模块,用于调用微信消息发送接口将所述Mysql数据库中的所述待发送消息分批发送给微信公众平台的用户,所述微信消息发送接口为客户端中微信公众平台向用户发送消息的接口,以及,所述待发送消息在被发送给用户之后其状态会根据消息发送结果被更改。
结合第二方面,在第二方面的一种可实现方式中,所述消息获取模块,包括:
传入接口获取单元,用于获取微信公众平台的消息传入接口,所述消息传入接口为客户端中应用软件向所述微信公众平台传入消息的接口;
封装单元,用于将不同类型的所述消息传入接口封装为统一的消息传入接口;
消息获取单元,用于利用所述统一的消息传入接口获取待发送消息。
结合第二方面,在第二方面的一种可实现方式中,所述消息发送装置还包括:
针对客户端中应用软件发送消息的类型生成不同的消息模板;
将所述应用软件发送消息的内容在对应的消息模板中填入,生成待发送消息。
结合第二方面,在第二方面的一种可实现方式中,所述Mysql数据库有两个,每一个Mysql数据库保存一个月内发送的消息,两个Mysql数据库交替进行保存,以及,每一个Mysql数据库中的消息以若干数据表的形式保存。
结合第二方面,在第二方面的一种可实现方式中,所述消息发送模块包括:
数据表发送单元,用于将当前使用的所述Mysql数据库中第一个数据表中的每一个待发送消息发送给微信公众平台的用户;还用于继续将所述Mysql数据库中下一个数据表中的每一个待发送消息发送给微信公众平台的用户,直至所述Mysql数据库中的所有数据表中的所有待发送消息的状态全部进行了更改;
发送结果获取单元,用于获取所述微信公众平台返回的每一个待发送消息的消息发送结果,所述消息发送结果用于表示所述待发送消息是否发送成功;
状态更改单元,用于根据所述消息发送结果对当前发送的数据表中的每一个待发送消息的状态进行更改。
结合第二方面,在第二方面的一种可实现方式中,所述消息发送模块还包括:
分布式锁分配单元,用于在将所述Mysql数据库中每一个数据表中的每一个待发送消息发送给微信公众平台的用户之前,为所述每一个数据表分配一个分布式锁,所述分布式锁用于控制所述数据表中的数据资源被占用的情况;
分布式锁解除单元,用于在对当前发送的数据表中的每一个待发送消息的状态进行更改之后,解除所述数据表对应的分布式锁。
结合第二方面,在第二方面的一种可实现方式中,所述消息发送装置还包括:
检查模块,用于在预设时间点检查所述Mysql数据库中的待重发消息,所述待重发消息是指状态为未发送和发送超时的消息;
消息重发模块,用于将所述待重发消息重新通过调用微信消息发送接口发送给微信公众平台的用户;
状态更改模块,用于根据微信公众平台返回的每一个所述待重发消息的消息发送结果,对每一个所述待重发消息的状态进行更改。
第三方面,本发明提供了一种电子设备,包括:存储器,用于存储程序指令;
处理器,用于调用并执行所述存储器中的程序指令,以实现第一方面所述的消息发送方法。
第四方面,本发明提供了一种存储介质,所述存储介质中存储有计算机程序,当消息发送装置的至少一个处理器执行所述计算机程序时,消息发送装置执行第一方面所述的消息发送方法。
由以上技术方案可知,本发明提供的消息发送方法、装置、电子设备及存储介质,能够利用消息模板获取待发送消息,再将待发送消息依次存入Redis消息队列中;然后分别将Redis消息队列中预设数量的待发送消息依次插入Mysql数据库中,以避免大量消息数据同时写入Mysql数据库,造成的Mysql数据库写入压力大的问题;最后调用微信消息发送接口将Mysql数据库中的所述待发送消息分批发送给微信公众平台的用户,以及在待发送消息被发送给用户之后其状态会根据消息发送结果被更改,以便消息发送操作的发起方能够准确掌握每一个待发送消息的发送情况。
附图说明
为了更清楚地说明本发明的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的消息发送方法的流程图;
图2为本发明实施例提供的生成待发送消息的方法流程图;
图3为本发明实施例提供的获取待发送消息的方法流程图;
图4为本发明实施例提供的发送待发送消息的方法流程图;
图5为本发明实施例提供的另一种发送待发送消息的方法流程图;
图6为本发明实施例提供的另一种消息发送方法的流程图;
图7为本发明实施例提供的消息发送装置的结构框图;
图8为本发明实施例提供的电子设备硬件结构示意图。
具体实施方式
目前应用软件利用微信公众平台向微信订阅用户发送软件消息的方式,由于预先需要将所有要发布的消息全部都写入Mysql数据库中,使得Mysql数据库所承受的写入压力较大;另外,应用软件无法准确掌握消息的发送状态。因此,本发明提供了一种消息发送方法,利用Redis消息队列分批向Mysql数据库中存入消息,以减轻Mysql数据库的写入压力,同时还对微信公众平台已发送消息的状态进行更改,以便应用软件对消息的发送状态进行掌握。
图1为本发明实施例提供的消息发送方法的流程图。如图1所示,本发明实施例提供的消息发送方法,包括:
S101,获取待发送消息,所述待发送消息为利用消息模板填入消息内容生成的消息。
在目前的利用微信公众平台发送消息的方法中,大多是调用不同的微信消息传入接口分别传入不同的消息体,然而,微信公众平台的各个传入接口和消息发送接口之间需要极高的耦合度,采用目前这种消息发送方式并不能支持大流量高并发的接口调用。所以本发明实施例中根据应用软件传入消息的类型,针对于不同类型的消息建立不同的消息模板,每一种类型的消息可以用不同的消息编号来区分,每一个消息编号对应一个消息模板,当需要发送某种消息时,只需要根据该消息的消息编号找到对应的消息模板,再在该消息模板中填入该消息的具体内容即可获得可以传入微信公众平台的待发送消息。本发明实施例中获取的待发送消息可以来自于客户端中不同的应用软件。
具体的,图2为本发明实施例提供的生成待发送消息的方法流程图。如图2所示,本发明实施例中,在所述获取待发送消息之前,还包括:
S201,针对客户端中应用软件发送消息的类型生成不同的消息模板。
S202,将所述应用软件发送消息的内容在对应的消息模板中填入,生成待发送消息。
本发明实施例中,生成的消息模板中包括消息体和参数,相同类型的两个或者多个消息对应的消息体是相同的,而对应的参数是不同的,参数表示的就是消息所要传达的具体内容,由于表达一个意思的消息可以存在有多种表达形式,所以本发明实施例中对表达同一个意思的同类型消息建立消息模板,在生成待发送消息时,只需要获取消息本身的内容,再将内容填入到消息模板的对位置,生成能够表达出原意思的待发送消息。本发明实施例中可以将不同应用软件发送的消息理解为不同类型的消息。
S102,将所述待发送消息依次存入Redis消息队列中。
本发明实施例中利用Redis数据库作为消息存入Mysql数据库的中转存储机构,避免直接将所有的待发送消息一同插入到Mysql数据库中,造成Mysql数据库的写入压力大的问题。具体的,Redis数据库中包括Redis消息队列,将每一条待发送消息依次存入Redis消息队列中的对应位置保存。其中,Redis数据库是一个使用ANSIC编写的开源、支持网络、基于内存并且可选持久性的键值对存储数据库。
S103,分别将所述Redis消息队列中预设数量的所述待发送消息插入Mysql数据库中。
本发明实施例中,为了避免大量消息数据同时写入Mysql数据库,造成Mysql数据库写入压力大并且消息容易丢失的问题,将Redis消息队列中的所有待发送消息分批写入Mysql数据库,每一批发送的消息的数量的根据当前使用的Mysql数据库的实际处理情况而定,例如将Redis消息队列中的每10个待发送消息作为一批数据同时写入Mysql数据库中。
S104,调用微信消息发送接口将所述Mysql数据库中的所述待发送消息分批发送给微信公众平台的用户,所述微信消息发送接口为客户端中微信公众平台向用户发送消息的接口,以及,所述待发送消息在被发送给用户之后其状态会根据消息发送结果被更改。
另外,本发明实施例中的所述Mysql数据库有两个,每一个Mysql数据库保存一个月内发送的消息,两个Mysql数据库交替进行保存,以及,每一个Mysql数据库中的消息以若干数据表的形式保存。
本发明实施例中获取的待发送消息可以来自于客户端中不同的应用软件,所有应用软件都可以利用本发明实施例中的方法将待发送消息统一保存进Mysql数据库中,再分批进行消息的发送。
在本发明实施例中,每一个Mysql数据库中能保存的消息数量是有限的,Mysql数据库中的每个数据表能保存的消息数量也是有限的,例如每个Mysql数据库中能保存最多1000条消息数据,而每个数据表能保存最多200条数据,那么每个Mysql数据库中最多存在5个数据表。在需要向用户发送消息时,需要每一次都将Mysql数据库中的一个数据表中对应的消息数据全部发送给用户。另外,在每一个消息发送完之后获取微信公众平台发回的结果,该结果显示出每一个消息是否发送成功、是否发送超时等,本发明实施例中在Mysql数据库保存的每一个消息都会有一个状态标记,未发送之前,每一个消息对应的状态都是待发送,发送之后,根据发送的结果对每一个消息的状态进行更改,以便应用软件或者商家能够掌握每一个消息的发送情况。
可见,本发明实施例提供的消息发送方法,能够利用Redis消息队列最为消息存储的中转机构存储所有的待发送消息,然后分别将Redis消息队列中预设数量的待发送消息依次插入Mysql数据库中,以避免大量消息数据同时写入Mysql数据库,造成的Mysql数据库写入压力大的问题;最后调用微信消息发送接口将Mysql数据库中的所述待发送消息分批发送给微信公众平台的用户,以及在待发送消息被发送给用户之后其状态会根据消息发送结果被更改,以便消息发送操作的发起方能够准确掌握每一个待发送消息的发送情况。
图3为本发明实施例提供的获取待发送消息的方法流程图。如图3所示,本发明实施例提供的获取待发送消息的步骤包括:
S301,获取微信公众平台的消息传入接口,所述消息传入接口为客户端中应用软件向所述微信公众平台传入消息的接口。
目前利用微信公众平台向用户发送消息的方法中,多是采用微信公众平台提供的接口进行消息的传入,然而微信公众平台自身的消息传入接口和消息发送直接具有较高的耦合,不利于大流量的调用接口进行消息的传入和消息的发送,因此在本发明实施例中,应用软件所在的客户端可以自己将微信公众平台提供的消息传入接口全部进行封装,封装成一个统一的消息传入接口,利用这个接口实现不同消息的传入。
S302,将不同类型的所述消息传入接口封装为统一的消息传入接口。本发明实施例中对封装方式不进行具体限定。
S303,利用所述统一的消息传入接口获取待发送消息。
本发明实施例中提供的消息发送方法,能够将微信公众平台提供的所有消息传入接口统一进行封装,在客户端中提供一个统一的消息传入接口,将待发送消息传入微信公众平台中,避免无法实现大量调用微信公众平台提供的消息传入接口的问题。
图4为本发明实施例提供的发送待发送消息的方法流程图。如图4所示,本发明实施例中,所述调用微信消息发送接口将所述Mysql数据库中的所述待发送消息分批发送给微信公众平台的用户的步骤包括:
S401,将当前使用的所述Mysql数据库中第一个数据表中的每一个待发送消息发送给微信公众平台的用户。
本发明实施例的Mysql数据库中通常保存若干个数据表,每次发消息都以数据表为单位发送,通常从Mysql数据库中的第一个数据表开始。
S402,获取所述微信公众平台返回的每一个待发送消息的消息发送结果,所述消息发送结果用于表示所述待发送消息是否发送成功。
本发明实施例中为了便于对消息发送情况进行掌握,每一个消息都要对应接收一个发送结果,这个结果由微信公众平台发回。由于待发送消息全部都是由微信公众平台提供的消息发送接口发送的,因此消息发送接口能够对消息进行监控,确定消息是否发送出去或者是否发送超时等,然后通过微信公众平台发回。
S403,根据所述消息发送结果对当前发送的数据表中的每一个待发送消息的状态进行更改。
本发明实施例中,为了掌握Mysql数据库每一个待发送消息的发送情况,在每一个待发送消息发送之后,都要对其状态进行更改,例如将未发送的状态更改为发送成功,或者将未发送的状态更改为发送超时。
S404,继续将所述Mysql数据库中下一个数据表中的每一个待发送消息发送给微信公众平台的用户,直至所述Mysql数据库中的所有数据表中的所有待发送消息的状态全部进行了更改。
另外,本发明实施例中还设置了计数器,计数器中可以预先设置计数的数量,比如一个数据表中的待发送消息的数量,然后在该数据表进行消息发送时,对每一条已经发送的消息进行计数,当数量达到预先设置的数量时,可以转而继续对下一个数据表中的消息进行计数,重复上述过程。这样可以进一步保证数据表中的待发送消息不会出现漏发的问题。
可见,本发明实施例中以数据表为单位分批将待发送消息通过微信公众平台发送给用户,并且根据消息发送结果对数据表中的每一个待发送消息的状态进行更改,在保证消息不会漏发的情况下,也能准确掌握消息的发送情况。
图5为本发明实施例提供的另一种发送待发送消息的方法流程图。如图5所示,本发明实施例中,所述调用微信消息发送接口将所述Mysql数据库中的所述待发送消息分批发送给微信公众平台的用户的步骤还包括:
S501,在将所述Mysql数据库中每一个数据表中的每一个待发送消息发送给微信公众平台的用户之前,为所述每一个数据表分配一个分布式锁,所述分布式锁用于控制所述数据表中的数据资源被占用的情况。
本发明实施例中还利用分布式锁对正在发送消息的数据表进行资源锁定,防止该数据表中的消息数据在进行发送时被其他应用或者操作进行更改,导致发送的消息错误。
S502,在对当前发送的数据表中的每一个待发送消息的状态进行更改之后,解除所述数据表对应的分布式锁。
可见,本发明实施例中提供的消息发送方法,还能够利用分布式锁保证正在发送的数据表不会被其他应用或者操作所共享,进一步保证待发送消息的准确性。
图6为本发明实施例提供的另一种消息发送方法的流程图。如图6所示,本发明实施例中,在所述调用微信消息发送接口将所述Mysql数据库中的所述待发送消息分批发送给微信公众平台的用户之后,还包括:
S601,在预设时间点检查所述Mysql数据库中的待重发消息,所述待重发消息是指状态为未发送和发送超时的消息。
本发明实施例中因为会对数据表中的待发送消息进行状态的标记,以及会对发送过的消息进行状态的更改,因此可以准确的掌握数据表中所有消息的发送情况,对于未发送成功的或者发送超时的消息都需要重新发送,以保证用户能接收到所有的消息,进一步防止消息漏发。
S602,将所述待重发消息重新通过调用微信消息发送接口发送给微信公众平台的用户。
S603,根据微信公众平台返回的每一个所述待重发消息的消息发送结果,对每一个所述待重发消息的状态进行更改。
本发明实施例中,预设时间点可以设置为固定的日期,比如每个月的1号检查,也可以设置为一个时间周期,比如每30天检查一次。另外,由于本发明中采用两个Mysql数据库用来交替保存消息,那么需要设定固定的时间清空保存上一个月消息的Mysql数据库,以保证该Mysql数据库能继续保存下一个月的消息数据,对于同一个Mysql数据库进行清空操作需要在检查操作之后进行,比如11月1号检查保存有10月份消息数据的Mysql数据库中是否有待重发消息,然后在11月的27号清空保存有10月份消息数据的Mysql数据库,以使该数据库能继续保存12月份的消息数据。
本发明实施例中,还可以依靠具体的线程对消息方法进行具体的实现,比如,采用线程将Redis消息队列中的消息插入Mysql数据库中,采用线程调用微信公众平台的消息发送接口进行消息的发送,采用线程处理Mysql数据库中每一个数据表等等。
由以上技术方案可知,本发明实施例提供的消息发送方法,能够利用消息模板获取待发送消息,再将待发送消息依次存入Redis消息队列中;然后分别将Redis消息队列中预设数量的待发送消息依次插入Mysql数据库中,以避免大量消息数据同时写入Mysql数据库,造成的Mysql数据库写入压力大的问题;最后调用微信消息发送接口将Mysql数据库中的所述待发送消息分批发送给微信公众平台的用户,以及在待发送消息被发送给用户之后其状态会根据消息发送结果被更改,以便消息发送操作的发起方能够准确掌握每一个待发送消息的发送情况。
图7为本发明实施例提供的消息发送装置的结构框图。如图7所示,本发明实施例提供的消息发送装置,包括:
消息获取模块71,用于获取待发送消息,所述待发送消息为利用消息模板填入消息内容生成的消息;第一消息保存模块72,用于将所述待发送消息依次存入Redis消息队列中;第二消息保存模块73,用于分别将所述Redis消息队列中预设数量的所述待发送消息插入Mysql数据库中;消息发送模块74,用于调用微信消息发送接口将所述Mysql数据库中的所述待发送消息分批发送给微信公众平台的用户,所述微信消息发送接口为客户端中微信公众平台向用户发送消息的接口,以及,所述待发送消息在被发送给用户之后其状态会根据消息发送结果被更改。所述Mysql数据库有两个,每一个Mysql数据库保存一个月内发送的消息,两个Mysql数据库交替进行保存,以及,每一个Mysql数据库中的消息以若干数据表的形式保存。
其中,所述消息获取模块,包括:传入接口获取单元,用于获取微信公众平台的消息传入接口,所述消息传入接口为客户端中应用软件向所述微信公众平台传入消息的接口;封装单元,用于将不同类型的所述消息传入接口封装为统一的消息传入接口;消息获取单元,用于利用所述统一的消息传入接口获取待发送消息。
所述消息发送装置还包括:针对客户端中应用软件发送消息的类型生成不同的消息模板;将所述应用软件发送消息的内容在对应的消息模板中填入,生成待发送消息。
所述消息发送模块包括:数据表发送单元,用于将当前使用的所述Mysql数据库中第一个数据表中的每一个待发送消息发送给微信公众平台的用户;还用于继续将所述Mysql数据库中下一个数据表中的每一个待发送消息发送给微信公众平台的用户,直至所述Mysql数据库中的所有数据表中的所有待发送消息的状态全部进行了更改;发送结果获取单元,用于获取所述微信公众平台返回的每一个待发送消息的消息发送结果,所述消息发送结果用于表示所述待发送消息是否发送成功;状态更改单元,用于根据所述消息发送结果对当前发送的数据表中的每一个待发送消息的状态进行更改。
所述消息发送模块还包括:分布式锁分配单元,用于在将所述Mysql数据库中每一个数据表中的每一个待发送消息发送给微信公众平台的用户之前,为所述每一个数据表分配一个分布式锁,所述分布式锁用于控制所述数据表中的数据资源被占用的情况;分布式锁解除单元,用于在对当前发送的数据表中的每一个待发送消息的状态进行更改之后,解除所述数据表对应的分布式锁。
所述消息发送装置还包括:检查模块,用于在预设时间点检查所述Mysql数据库中的待重发消息,所述待重发消息是指状态为未发送和发送超时的消息;消息重发模块,用于将所述待重发消息重新通过调用微信消息发送接口发送给微信公众平台的用户;状态更改模块,用于根据微信公众平台返回的每一个所述待重发消息的消息发送结果,对每一个所述待重发消息的状态进行更改。
图8为本发明实施例提供的电子设备硬件结构示意图。如图8所示,本发明实施例提供的电子设备包括:存储器81,用于存储程序指令;处理器82,用于调用并执行所述存储器中的程序指令,以实现上述实施例中所述的消息发送方法。
本发明实施例中,处理器82和存储器81可通过总线或其他方式连接。处理器可以是通用处理器,例如中央处理器、数字信号处理器、专用集成电路,或者被配置成实施本发明实施例的一个或多个集成电路。存储器可以包括易失性存储器,例如随机存取存储器;存储器也可以包括非易失性存储器,例如只读存储器、快闪存储器、硬盘或固态硬盘。
本发明还提供一种存储介质,所述存储介质中存储有计算机程序,当消息发送装置的至少一个处理器执行所述计算机程序时,消息发送装置执行上述实施例中所述的消息发送方法。
所述的存储介质可为磁碟、光盘、只读存储记忆体(英文:read-only memory,简称:ROM)或随机存储记忆体(英文:random access memory,简称:RAM)等。
本领域的技术人员可以清楚地了解到本发明实施例中的技术可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明实施例中的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
本说明书中各个实施例之间相同相似的部分互相参见即可。尤其,对于服务构建装置和服务加载装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例中的说明即可。
以上所述的本发明实施方式并不构成对本发明保护范围的限定。
Claims (12)
1.一种消息发送方法,其特征在于,包括:
获取待发送消息,所述待发送消息为利用消息模板填入消息内容生成的消息;
将所述待发送消息依次存入Redis消息队列中;
分别将所述Redis消息队列中预设数量的所述待发送消息插入Mysql数据库中;
调用微信消息发送接口将所述Mysql数据库中的所述待发送消息分批发送给微信公众平台的用户,所述微信消息发送接口为客户端中微信公众平台向用户发送消息的接口,以及,所述待发送消息在被发送给用户之后其状态会根据消息发送结果被更改;
所述调用微信消息发送接口将所述Mysql数据库中的所述待发送消息分批发送给微信公众平台的用户的步骤包括:
将当前使用的所述Mysql数据库中第一个数据表中的每一个待发送消息发送给微信公众平台的用户;
获取所述微信公众平台返回的每一个待发送消息的消息发送结果,所述消息发送结果用于表示所述待发送消息是否发送成功;
根据所述消息发送结果对当前发送的数据表中的每一个待发送消息的状态进行更改;
继续将所述Mysql数据库中下一个数据表中的每一个待发送消息发送给微信公众平台的用户,直至所述Mysql数据库中的所有数据表中的所有待发送消息的状态全部进行了更改;
在所述获取待发送消息之前,还包括:
针对客户端中应用软件发送消息的类型生成不同的消息模板;
将所述应用软件发送消息的内容在对应的消息模板中填入,生成待发送消息;
其中,所述消息模板包括消息体和参数,类型相同的消息模板中所述消息体是相同的,但是所述参数不同,所述参数表示所述应用软件发送消息的具体内容。
2.根据权利要求1所述的方法,其特征在于,所述获取待发送消息的步骤包括:
获取微信公众平台的消息传入接口,所述消息传入接口为客户端中应用软件向所述微信公众平台传入消息的接口;
将不同类型的所述消息传入接口封装为统一的消息传入接口;
利用所述统一的消息传入接口获取待发送消息。
3.根据权利要求1所述的方法,其特征在于,所述Mysql数据库有两个,每一个Mysql数据库保存一个月内发送的消息,两个Mysql数据库交替进行保存,以及,每一个Mysql数据库中的消息以若干数据表的形式保存。
4.根据权利要求1所述的方法,其特征在于,所述调用微信消息发送接口将所述Mysql数据库中的所述待发送消息分批发送给微信公众平台的用户的步骤还包括:
在将所述Mysql数据库中每一个数据表中的每一个待发送消息发送给微信公众平台的用户之前,为所述每一个数据表分配一个分布式锁,所述分布式锁用于控制所述数据表中的数据资源被占用的情况;
在对当前发送的数据表中的每一个待发送消息的状态进行更改之后,解除所述数据表对应的分布式锁。
5.根据权利要求1-4任一项所述的方法,其特征在于,在所述调用微信消息发送接口将所述Mysql数据库中的所述待发送消息分批发送给微信公众平台的用户之后,还包括:
在预设时间点检查所述Mysql数据库中的待重发消息,所述待重发消息是指状态为未发送和发送超时的消息;
将所述待重发消息重新通过调用微信消息发送接口发送给微信公众平台的用户;
根据微信公众平台返回的每一个所述待重发消息的消息发送结果,对每一个所述待重发消息的状态进行更改。
6.一种消息发送装置,其特征在于,包括:
消息获取模块,用于获取待发送消息,所述待发送消息为利用消息模板填入消息内容生成的消息;
第一消息保存模块,用于将所述待发送消息依次存入Redis消息队列中;
第二消息保存模块,用于分别将所述Redis消息队列中预设数量的所述待发送消息插入Mysql数据库中;
消息发送模块,用于调用微信消息发送接口将所述Mysql数据库中的所述待发送消息分批发送给微信公众平台的用户,所述微信消息发送接口为客户端中微信公众平台向用户发送消息的接口,以及,所述待发送消息在被发送给用户之后其状态会根据消息发送结果被更改;
所述消息模块还包括:
数据表发送单元,用于将当前使用的所述Mysql数据库中第一个数据表中的每一个待发送消息发送给微信公众平台的用户;还用于继续将所述Mysql数据库中下一个数据表中的每一个待发送消息发送给微信公众平台的用户,直至所述Mysql数据库中的所有数据表中的所有待发送消息的状态全部进行了更改;
发送结果获取单元,用于获取所述微信公众平台返回的每一个待发送消息的消息发送结果,所述消息发送结果用于表示所述待发送消息是否发送成功;
状态更改单元,用于根据所述消息发送结果对当前发送的数据表中的每一个待发送消息的状态进行更改;
所述消息发送装置,还用于在所述获取待发送消息之前,针对客户端中应用软件发送消息的类型生成不同的消息模板;将所述应用软件发送消息的内容在对应的消息模板中填入,生成待发送消息;其中,所述消息模板包括消息体和参数,类型相同的消息模板中所述消息体是相同的,但是所述参数不同,所述参数表示所述应用软件发送消息的具体内容。
7.根据权利要求6所述的装置,其特征在于,所述消息获取模块,包括:
传入接口获取单元,用于获取微信公众平台的消息传入接口,所述消息传入接口为客户端中应用软件向所述微信公众平台传入消息的接口;
封装单元,用于将不同类型的所述消息传入接口封装为统一的消息传入接口;
消息获取单元,用于利用所述统一的消息传入接口获取待发送消息。
8.根据权利要求6所述的装置,其特征在于,所述Mysql数据库有两个,每一个Mysql数据库保存一个月内发送的消息,两个Mysql数据库交替进行保存,以及,每一个Mysql数据库中的消息以若干数据表的形式保存。
9.根据权利要求6所述的装置,其特征在于,所述消息发送模块还包括:
分布式锁分配单元,用于在将所述Mysql数据库中每一个数据表中的每一个待发送消息发送给微信公众平台的用户之前,为所述每一个数据表分配一个分布式锁,所述分布式锁用于控制所述数据表中的数据资源被占用的情况;
分布式锁解除单元,用于在对当前发送的数据表中的每一个待发送消息的状态进行更改之后,解除所述数据表对应的分布式锁。
10.根据权利要求6-9任一项所述的装置,其特征在于,还包括:
检查模块,用于在预设时间点检查所述Mysql数据库中的待重发消息,所述待重发消息是指状态为未发送和发送超时的消息;
消息重发模块,用于将所述待重发消息重新通过调用微信消息发送接口发送给微信公众平台的用户;
状态更改模块,用于根据微信公众平台返回的每一个所述待重发消息的消息发送结果,对每一个所述待重发消息的状态进行更改。
11.一种电子设备,其特征在于,包括:存储器,用于存储程序指令;
处理器,用于调用并执行所述存储器中的程序指令,以实现权利要求1-5任一项所述的消息发送方法。
12.一种存储介质,其特征在于,所述存储介质中存储有计算机程序,当消息发送装置的至少一个处理器执行所述计算机程序时,消息发送装置执行权利要求1-5任一项所述的消息发送方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911359932.4A CN111147355B (zh) | 2019-12-25 | 2019-12-25 | 消息发送方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911359932.4A CN111147355B (zh) | 2019-12-25 | 2019-12-25 | 消息发送方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111147355A CN111147355A (zh) | 2020-05-12 |
CN111147355B true CN111147355B (zh) | 2022-08-09 |
Family
ID=70520182
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911359932.4A Active CN111147355B (zh) | 2019-12-25 | 2019-12-25 | 消息发送方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111147355B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112468387A (zh) * | 2020-11-25 | 2021-03-09 | 银盛通信有限公司 | 一种模板消息发送方法、计算机设备以及计算机存储介质 |
CN112650814B (zh) * | 2020-12-30 | 2023-09-26 | 平安壹钱包电子商务有限公司 | 基于消息中间件的数据存储方法、装置、设备及存储介质 |
CN114154098A (zh) * | 2021-11-29 | 2022-03-08 | 青岛海信智慧生活科技股份有限公司 | 消息推送方法及电子设备 |
CN114390451A (zh) * | 2021-12-09 | 2022-04-22 | 上海帜讯信息技术股份有限公司 | 基于消息队列的5g消息批量发送方法、装置及电子设备 |
CN114500443B (zh) * | 2021-12-27 | 2024-03-29 | 北京百度网讯科技有限公司 | 消息推送方法、装置、系统、电子设备和存储介质 |
CN115344403A (zh) * | 2022-07-27 | 2022-11-15 | 广州方舟信息科技有限公司 | 一种基于分布式消息队列的用户权益数据处理方法 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106850402B (zh) * | 2017-01-16 | 2020-11-03 | 腾讯科技(深圳)有限公司 | 消息的传输方法和装置 |
CN108694199A (zh) * | 2017-04-10 | 2018-10-23 | 北京京东尚科信息技术有限公司 | 数据同步装置、方法、存储介质及电子设备 |
US10637730B2 (en) * | 2018-02-02 | 2020-04-28 | Citrix Systems, Inc. | Message queue migration on A/B release environments |
CN108668160B (zh) * | 2018-04-23 | 2020-12-15 | 武汉斗鱼网络科技有限公司 | 节奏弹幕展示方法、装置及电子设备 |
CN108898463A (zh) * | 2018-07-02 | 2018-11-27 | 山东大学 | 一种高并发的农产品网上交易系统及其搭建方法、运行方法 |
CN109344172B (zh) * | 2018-08-31 | 2022-05-17 | 深圳市元征科技股份有限公司 | 一种高并发数据处理方法、装置及客户端服务器 |
CN109298957A (zh) * | 2018-10-18 | 2019-02-01 | 大唐网络有限公司 | 一种支持定时发送的具有高可靠性的消息管理方法 |
CN109445965B (zh) * | 2018-11-07 | 2021-06-22 | 北京明朝万达科技股份有限公司 | 由Redis和MySQL实现的消息处理方法和设备 |
-
2019
- 2019-12-25 CN CN201911359932.4A patent/CN111147355B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN111147355A (zh) | 2020-05-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111147355B (zh) | 消息发送方法、装置、电子设备及存储介质 | |
US8335498B2 (en) | Synchronization in unified messaging systems | |
US7769821B2 (en) | Systems and methods for enhanced meassage support using a generic client proxy | |
CN111371892A (zh) | 高并发分布式消息推送系统及方法 | |
CN105592117B (zh) | 一种事务消息的处理方法和装置 | |
CN110413424B (zh) | 可配置的第三方消息回调方法、装置、服务器和存储介质 | |
US20100082391A1 (en) | Method, device, and system for appointment messaging | |
CN109800150B (zh) | 一种灰度测试方法、服务器及计算机可读存储介质 | |
CN108833205B (zh) | 信息处理方法、装置、电子设备及存储介质 | |
WO2021159831A1 (zh) | 编程平台的用户代码运行方法及平台、节点、设备、介质 | |
CN108900627B (zh) | 一种网络请求方法、终端装置及存储介质 | |
CN112291325A (zh) | 一种消息的处理方法、装置及计算机系统 | |
CN110070444A (zh) | 一种区块链交易流程管理方法及相关装置 | |
CN111884769B (zh) | 消息同步方法及装置 | |
US20130227027A1 (en) | Method, system and apparatus for managing electronic subscriptions at a communication device | |
CN112598529A (zh) | 数据处理方法及装置、计算机可读存储介质、电子设备 | |
CN115544034A (zh) | 一种数据一致性方法及业务系统 | |
JP6999056B2 (ja) | メッセージ管理装置及びメッセージ管理方法 | |
CN113626157B (zh) | 一种交易事务控制方法、装置和系统 | |
CN110716972A (zh) | 高频率调用外部接口出错的处理方法和装置 | |
CN111506644A (zh) | 一种应用数据处理方法、装置和电子设备 | |
CN114244792B (zh) | 消息发送方法及装置,和消息显示方法及装置 | |
CN100454272C (zh) | 软件构件处理错误信息的方法 | |
CN116228146A (zh) | 一种事务管理方法、设备和计算机可读存储介质 | |
CN115277887A (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 | ||
GR01 | Patent grant |