本发明涉及计算机通信技术领域,尤其涉及一种数据通信方法及装置。
背景技术:
消息队列系统RabbitMQ(Rabbit Message Queue)包括消息队列服务器RabbitMQ Server和消费客户端RabbitMQ Client,其中,消息队列服务器中配置有消息队列Queue。消息队列服务器在对消息进行消费处理时,将消息保存于消息队列中,供之后消费客户端消费消息队列中的消息。由于消息可能会消费成功,也可能会消费失败,在消息消费失败时,消费客户端会将消息发送至消息队列服务器,消息队列服务器在接收到消费失败的消息时,立即对该消费失败的消息重新投递至消费客户端继续进行消费处理,直至该消息消费成功,这就会造成一直对该消息进行多次消费处理,此过程中其他消息的消费处理就受到了阻碍,导致消息队列服务器的消息处理效率不高。
技术实现要素:
本发明的主要目的在于提供一种数据通信方法和装置,旨在解决消息队列服务器的消息处理效率不高的技术问题。
为实现上述目的,本发明提供一种数据通信方法,所述数据通信方法包括以下步骤:
接收消费客户端发送的消息对应的状态值,其中,所述消费客户端在对消息进行业务逻辑处理完成时,返回处理结果的状态值,所述状态值包括成功、稍后重试、失败丢弃;
当所述状态值为稍后重试时,调用延迟消息交换机将所述消息发送至所述延迟消息交换机对应的延迟消息队列;
在历时所述延迟消息队列对应的预设延迟时间后,将所述消息发送至重试消息队列。
优选地,所述接收消费客户端发送的消息对应的状态值的步骤之前,还包括:
将所述消息发送至所述消费客户端,以供所述消费客户端对所述消息进行业务逻辑处理,并通过回调函数返回处理结果的状态值;
所述当所述状态值为稍后重试时,调用延迟消息交换机将所述消息发送至所述延迟消息交换机对应的延迟消息队列的步骤包括:
当所述状态值为稍后重试时,根据所述消息的消息头设置的重试次数,选择所述消息要发回的延迟交换机,并将所述消息发回选择的所述延迟消息交换机;
调用所述延迟消息交换机将所述消息发送至所述延迟消息交换机对应的延迟消息队列。
优选地,所述当所述状态值为稍后重试时,根据所述消息的消息头设置的重试次数,选择所述消息要发回的延迟交换机的步骤包括:
当所述状态值为稍后重试时,判断所述消息的消息头设置的重试次数是否小于预设的重试次数阈值;
在所述重试次数小于所述重试次数阈值时,根据所述重试次数选择所述消息要发回的延迟交换机。
优选地,所述当所述状态值为稍后重试时,判断所述消息的消息头设置的重试次数是否小于预设的重试次数阈值的步骤之后,还包括:
在所述重试次数大于所述重试次数阈值时,将所述消息发送至死信消息队列。
优选地,所述在历时所述延迟消息队列对应的预设延迟时间后,将所述消息发送至重试消息队列的步骤包括:
在历时所述延迟消息队列对应的预设延迟时间后,将所述消息发送至所述延迟消息队列对应的重试消息交换机,并通过所述重试消息交换机将所述消息发送至所述重试消息队列。
此外,为实现上述目的,本发明还提出一种数据通信装置,所述数据通信装置包括:
接收模块,用于接收消费客户端发送的消息对应的状态值,其中,所述消费客户端在对消息进行业务逻辑处理完成时,返回处理结果的状态值,所述状态值包括成功、稍后重试、失败丢弃;
发送模块,用于当所述状态值为稍后重试时,调用延迟消息交换机将所述消息发送至所述延迟消息交换机对应的延迟消息队列;
处理模块,用于在历时所述延迟消息队列对应的预设延迟时间后,将所述消息发送至重试消息队列。
优选地,所述发送模块还用于:
将所述消息发送至所述消费客户端,以供所述消费客户端对所述消息进行业务逻辑处理,并通过回调函数返回处理结果的状态值;
以及当所述状态值为稍后重试时,根据所述消息的消息头设置的重试次数,选择所述消息要发回的延迟交换机,将所述消息发回选择的所述延迟消息交换机,并调用所述延迟消息交换机将所述消息发送至所述延迟消息交换机对应的延迟消息队列。
优选地,所述发送模块包括:
判断单元,用于当所述状态值为稍后重试时,判断所述消息的消息头设置的重试次数是否小于预设的重试次数阈值;
选择单元,用于在所述重试次数小于所述重试次数阈值时,根据所述重试次数选择所述消息要发回的延迟交换机。
优选地,所述发送模块还用于:
在所述重试次数大于所述重试次数阈值时,将所述消息发送至死信消息队列。
优选地,所述处理模块用于:
在历时所述延迟消息队列对应的预设延迟时间后,将所述消息发送至所述延迟消息队列对应的重试消息交换机,并通过所述重试消息交换机将所述消息发送至所述重试消息队列。
本发明提出的数据通信方法及装置,当接收到消费客户端发送的消息对应的状态值为稍后重试时,调用延迟消息交换机将该消息发送至延迟消息交换机对应的延迟消息队列,并在历时该延迟消息队列对应的预设延迟时间后,将该消息发送至重试消息队列,供消费客户端对重试消息队列中的该消息进行消费。也即在消息消费失败时,并不是立即对该消息再次重新进行消费,直至该消息消费成功,而是经过一段延迟时间后再对该消息进行消费,在该延迟时间内,可以对其他消息进行消费处理,因此,提高了消息队列服务器的消息处理效率。
附图说明
图1为本发明数据通信方法第一实施例的流程示意图;
图2为本发明数据通信方法第二实施例中当所述状态值为稍后重试时,调用延迟消息交换机将所述消息发送至所述延迟消息交换机对应的延迟消息队列的细化流程示意图;
图3为本发明数据通信装置第一实施例的功能模块示意图;
图4为本发明数据通信装置第二实施例中发送模块的细化功能模块示意图。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明提供一种数据通信方法。参照图1,图1为本发明数据通信方法第一实施例的流程示意图。在本实施例中,所述数据通信方法包括以下步骤:
步骤S10,接收消费客户端发送的消息对应的状态值,其中,所述消费客户端在对消息进行业务逻辑处理完成时,返回处理结果的状态值,所述状态值包括成功、稍后重试、失败丢弃;
消息队列系统RabbitMQ(Rabbit Message Queue)包括消息队列服务器RabbitMQ Server和消费客户端RabbitMQ Client,其中,消息队列服务器RabbitMQ Server中配置有延迟消息交换机Delay Exchange、重试消息交换机Redelivery Exchange、延迟消息队列Delay Queue、重试消息队列Retry Queue、死信消息队列Dead Letter Queue等。当消费客户端RabbitMQ Client对消息队列服务器RabbitMQ Server中的消息进行业务逻辑处理时,可能会消费成功,也有可能会消费失败。在对消息进行业务逻辑处理完成时,消费客户端RabbitMQ Client向消息队列服务器RabbitMQ Server返回对消息进行业务逻辑处理结果的状态值。其中,对消息进行业务逻辑处理结果的状态值包括成功、稍后重试、失败丢弃等等。例如,当消费客户端RabbitMQ Client消费消息失败时,消费客户端RabbitMQ Client将该消息发送至消息队列服务器RabbitMQ Server,并向消息队列服务器RabbitMQ Server返回稍后重试的状态值。消息队列服务器RabbitMQ Server接收消费客户端RabbitMQ Client发送的消息以及对消息进行业务逻辑处理结果的状态值。
步骤S20,当所述状态值为稍后重试时,调用延迟消息交换机将所述消息发送至所述延迟消息交换机对应的延迟消息队列;
本实施例中,延迟消息交换机Delay Exchange与延迟消息队列Delay Queue具有绑定的对应关系。当消息队列服务器RabbitMQ Server接收到消费客户端RabbitMQ Client发送的对消息进行业务逻辑处理结果的状态值为稍后重试时,消息队列服务器RabbitMQ Server调用延迟消息交换机Delay Exchange将消息发送至延迟消息交换机Delay Exchange对应的延迟消息队列Delay Queue。其中,延迟消息队列Delay Queue对应有一个预设延迟时间。在未到达延迟时间时,延迟消息队列Delay Queue中的消息无法进行提取、投递等处理,只有当到达延迟时间时,才能提取延迟消息队列Delay Queue中的消息。
步骤S30,在历时所述延迟消息队列对应的预设延迟时间后,将所述消息发送至重试消息队列。
当消息队列服务器RabbitMQ Server调用延迟消息交换机Delay Exchange将该消息发送至延迟消息交换机Delay Exchange对应的延迟消息队列Delay Queue,在历时该延迟消息队列Delay Queue对应的预设延迟时间之后,将该消息发送至重试消息队列Retry Queue。本实施例中,默认订阅重试消息队列Retry Queue,当消息发送至重试消息队列Retry Queue中之后,消费客户端RabbitMQ Client即可获取并消费该消息。若此次该消息还未消费成功,则消费客户端RabbitMQ Client可继续向消息队列服务器RabbitMQ Server发送该消息以及稍后重试的状态值,消息队列服务器RabbitMQ Server再次执行上述操作。在此过程中,由于消息是经过一段的延迟时间后才发送至重试消息队列Retry Queue的,在此期间,消息队列服务器RabbitMQ Server可以对其他的消息进行消费处理操作。
具体地,所述步骤S30包括:
步骤a,在历时所述延迟消息队列对应的预设延迟时间后,将所述消息发送至所述延迟消息队列对应的重试消息交换机,并通过所述重试消息交换机将所述消息发送至所述重试消息队列。
本实施例中,重试消息交换机Redelivery Exchange与延迟消息队列Delay Queue建立有绑定关系。当消息队列服务器RabbitMQ Server调用延迟消息交换机Delay Exchange将该消息发送至延迟消息交换机Delay Exchange对应的延迟消息队列Delay Queue,在历时该延迟消息队列Delay Queue对应的预设延迟时间之后,将该消息发送至与该延迟消息队列Delay Queue有绑定关系的重试消息交换机Redelivery Exchange,通过该重试消息交换机Redelivery Exchange将该消息发送至重试消息队列Retry Queue,供之后消费客户端RabbitMQ Client获取并消费该消息。
本实施例提供的方案,当接收到消费客户端发送的消息对应的状态值为稍后重试时,调用延迟消息交换机将该消息发送至延迟消息交换机对应的延迟消息队列,并在历时该延迟消息队列对应的预设延迟时间后,将该消息发送至重试消息队列,供消费客户端对重试消息队列中的该消息进行消费。也即在消息消费失败时,并不是立即对该消息再次重新进行消费,直至该消息消费成功,而是经过一段延迟时间后再对该消息进行消费,在该延迟时间内,可以对其他消息进行消费处理,因此,提高了消息队列服务器的消息处理效率。同时,还降低了消息队列服务器的负载,并通过重试消息队列完成消费客户端的转态机模型。
进一步地,如图2所示,基于第一实施例提出本发明数据通信方法第二实施例。在第二实施例中,所述步骤S10之前,还包括:
步骤b,将所述消息发送至所述消费客户端,以供所述消费客户端对所述消息进行业务逻辑处理,并通过回调函数返回处理结果的状态值;
所述步骤S20包括:
步骤S21,当所述状态值为稍后重试时,根据所述消息的消息头设置的重试次数,选择所述消息要发回的延迟消息交换机,并将所述消息发回选择的所述延迟消息交换机;
步骤S22,调用所述延迟消息交换机将所述消息发送至所述延迟消息交换机对应的延迟消息队列。
在本实施例中,当消费客户端RabbitMQ Client要消费消息队列服务器RabbitMQ Server中的消息时,消息队列服务器RabbitMQ Server将消息发送至消费客户端RabbitMQ Client,消费客户端RabbitMQ Client对该消息进行业务逻辑处理,并在对消息进行业务逻辑处理完成时,通过回调函数向消息队列服务器RabbitMQ Server返回对消息进行业务逻辑处理结果的状态值。当消费失败时,消费客户端RabbitMQ Client通过回调函数向消息队列服务器RabbitMQ Server返回稍后重试的状态值以及该消息。其中,该消息的消息头中设置有消息的重试次数。
本实施例中,消息队列服务器RabbitMQ Server中可配置多个延迟消息交换机Delay Exchange、多个重试消息交换机Redelivery Exchange和多个延迟消息队列Delay Queue,其中,一个延迟消息交换机Delay Exchange与一个延迟消息队列Delay Queue具有一一对应关系,一个延迟消息队列Delay Queue与一个重试消息交换机Redelivery Exchange建立有绑定的一一对应关系。当消息队列服务器RabbitMQ Server接收到稍后重试的状态值以及该消息时,先根据该消息的消息头设置的重试次数,选择该消息要发回的延迟交换机Delay Exchange。例如,在该消息的消息头设置的重试次数为1时,选择该消息要发回的延迟交换机Delay Exchange为Delay Exchange 1。然后,将该消息发回选择的延迟消息交换机Delay Exchange,并将该消息发送至延迟消息交换机Delay Exchange对应的延迟消息队列Delay Queue。
进一步地,所述步骤S21包括:
步骤c,当所述状态值为稍后重试时,判断所述消息的消息头设置的重试次数是否小于预设的重试次数阈值;
步骤e,在所述重试次数小于所述重试次数阈值时,根据所述重试次数选择所述消息要发回的延迟交换机。
进一步地,在所述步骤c之后,还包括:
步骤e,在所述重试次数大于所述重试次数阈值时,将所述消息发送至死信消息队列。
当对消息再次消费时,消息不一定会消费成功,有可能还是消费失败,为了避免产生对某一个消息一直进行消费的死循环,本实施例中,预先设置有消息的一个重试次数阈值,例如,设置该重试次数阈值为16,该重试次数阈值可以根据实际情况进行灵活设置,在此不作限制。当消息队列服务器RabbitMQ Server接收到稍后重试的状态值时,进一步判断该消息的消息头设置的重试次数是否小于预设的重试次数阈值。在该消息的消息头设置的重试次数小于重试次数阈值时,也即说明该消息的消费次数还不多,此时,根据该消息的消息头设置的重试次数选择该消息要发回的延迟交换机Delay Exchange,将该消息发回选择的延迟消息交换机Delay Exchange,并调用延迟消息交换机Delay Exchange将该消息发送至该延迟消息交换机Delay Exchange对应的延迟消息队列Delay Queue。当消息的消息头设置的重试次数大于重试次数阈值时,也即说明该消息的消费次数已经过多,此时,为了避免进入对该消息一直进行消费处理的死循环,将该消息发送至死信消息队列Dead Letter Queue。死信消息队列Dead Letter Queue会永久保存该消费失败的消息,后期业务监控可通过提取死信消息队列Dead Letter Queue中保存的消费失败的消息进行相关处理操作。
进一步地,消息队列服务器RabbitMQ Server中可配置多个重试消息队列Retry Queue,每个重试消息队列Retry Queue都有对应的重试消息队列名称Retry Queue name。并且,消息中携带有对应的重试消息队列名称Retry Queue name,当消息发送至重试消息交换机Redelivery Exchange中后,根据该消息中携带的重试消息队列名称Retry Queue name,将该消息发送至该重试消息队列名称Retry Queue name对应的重试消息队列Retry Queue中,供之后消费客户端RabbitMQ Client获取并消费该消息。
本实施例提出的方案,在消息的消息头设置的重试次数小于预设的重试次数阈值时,将该消息发送至选择的延迟消息交换机,并调用该延迟消息交换机将该消息发送至对应的延迟消息队列,对该消息重新进行消费处理,在消息的消息头设置的重试次数大于预设的重试次数阈值时,直接将该消息发送至死信消息队列,不再对该消息进行消费处理,避免了进入失败消费的死循环过程,从而进一步提高了消息队列服务器的消息处理效率。
本发明进一步提供一种数据通信装置。参照图3,图3为本发明数据通信装置第一实施例的功能模块示意图。
在本实施例中,所述数据通信装置包括:
接收模块10,用于接收消费客户端发送的消息对应的状态值,其中,所述消费客户端在对消息进行业务逻辑处理完成时,返回处理结果的状态值,所述状态值包括成功、稍后重试、失败丢弃;
消息队列系统RabbitMQ(Rabbit Message Queue)包括消息队列服务器RabbitMQ Server和消费客户端RabbitMQ Client,其中,消息队列服务器RabbitMQ Server中配置有延迟消息交换机Delay Exchange、重试消息交换机Redelivery Exchange、延迟消息队列Delay Queue、重试消息队列Retry Queue、死信消息队列Dead Letter Queue等。当消费客户端RabbitMQ Client对消息队列服务器RabbitMQ Server中的消息进行业务逻辑处理时,可能会消费成功,也有可能会消费失败。在对消息进行业务逻辑处理完成时,消费客户端RabbitMQ Client向消息队列服务器RabbitMQ Server返回对消息进行业务逻辑处理结果的状态值。其中,对消息进行业务逻辑处理结果的状态值包括成功、稍后重试、失败丢弃等等。例如,当消费客户端RabbitMQ Client消费消息失败时,消费客户端RabbitMQ Client将该消息发送至消息队列服务器RabbitMQ Server,并向消息队列服务器RabbitMQ Server返回稍后重试的状态值。接收模块10接收消费客户端RabbitMQ Client发送的消息以及对消息进行业务逻辑处理结果的状态值。
发送模块20,用于当所述状态值为稍后重试时,调用延迟消息交换机将所述消息发送至所述延迟消息交换机对应的延迟消息队列;
本实施例中,延迟消息交换机Delay Exchange与延迟消息队列Delay Queue具有绑定的对应关系。当接收模块10接收到消费客户端RabbitMQ Client发送的对消息进行业务逻辑处理结果的状态值为稍后重试时,发送模块20调用延迟消息交换机Delay Exchange将消息发送至延迟消息交换机Delay Exchange对应的延迟消息队列Delay Queue。其中,延迟消息队列Delay Queue对应有一个预设延迟时间。在未到达延迟时间时,延迟消息队列Delay Queue中的消息无法进行提取、投递等处理,只有当到达延迟时间时,才能提取延迟消息队列Delay Queue中的消息。
处理模块30,用于在历时所述延迟消息队列对应的预设延迟时间后,将所述消息发送至重试消息队列。
当发送模块20调用延迟消息交换机Delay Exchange将该消息发送至延迟消息交换机Delay Exchange对应的延迟消息队列Delay Queue,在历时该延迟消息队列Delay Queue对应的预设延迟时间之后,处理模块30将该消息发送至重试消息队列Retry Queue。本实施例中,默认订阅重试消息队列Retry Queue,当消息发送至重试消息队列Retry Queue中之后,消费客户端RabbitMQ Client即可获取并消费该消息。若此次该消息还未消费成功,则消费客户端RabbitMQ Client可继续向消息队列服务器RabbitMQ Server发送该消息以及稍后重试的状态值,发送模块20再次执行上述操作。在此过程中,由于消息是经过一段的延迟时间后才发送至重试消息队列Retry Queue的,在此期间,处理模块30可以对其他的消息进行消费处理操作。
具体地,所述处理模块30用于:
在历时所述延迟消息队列对应的预设延迟时间后,将所述消息发送至所述延迟消息队列对应的重试消息交换机,并通过所述重试消息交换机将所述消息发送至所述重试消息队列。
本实施例中,重试消息交换机Redelivery Exchange与延迟消息队列Delay Queue建立有绑定关系。当发送模块20调用延迟消息交换机Delay Exchange将该消息发送至延迟消息交换机Delay Exchange对应的延迟消息队列Delay Queue,在历时该延迟消息队列Delay Queue对应的预设延迟时间之后,处理模块30将该消息发送至与该延迟消息队列Delay Queue有绑定关系的重试消息交换机Redelivery Exchange,通过该重试消息交换机Redelivery Exchange将该消息发送至重试消息队列Retry Queue,供之后消费客户端RabbitMQ Client获取并消费该消息。
本实施例提供的方案,当接收模块10接收到消费客户端发送的消息对应的状态值为稍后重试时,发送模块20调用延迟消息交换机将该消息发送至延迟消息交换机对应的延迟消息队列,并在历时该延迟消息队列对应的预设延迟时间后,处理模块30将该消息发送至重试消息队列,供消费户端对重试消息队列中的该消息进行消费。也即在消息消费失败时,并不是立即对该消息再次重新进行消费,直至该消息消费成功,而是经过一段延迟时间后再对该消息进行消费,在该延迟时间内,可以对其他消息进行消费处理,因此,提高了消息队列服务器的消息处理效率。同时,还降低了消息队列服务器的负载,并通过重试消息队列完成消费客户端的转态机模型。
进一步地,基于第一实施例提出本发明数据通信装置第二实施例。在第二实施例中,所述发送模块20还用于:
将所述消息发送至所述消费客户端,以供所述消费客户端对所述消息进行业务逻辑处理,并通过回调函数返回处理结果的状态值;
以及当所述状态值为稍后重试时,根据所述消息的消息头设置的重试次数,选择所述消息要发回的延迟交换机,将所述消息发回选择的所述延迟消息交换机,并调用所述延迟消息交换机将所述消息发送至所述延迟消息交换机对应的延迟消息队列。
在本实施例中,当消费客户端RabbitMQ Client要消费消息队列服务器RabbitMQ Server中的消息时,发送模块20将消息发送至消费客户端RabbitMQ Client,消费客户端RabbitMQ Client对该消息进行业务逻辑处理,并在对消息进行业务逻辑处理完成时,通过回调函数向消息队列服务器RabbitMQ Server返回对消息进行业务逻辑处理结果的状态值。当消费失败时,消费客户端RabbitMQ Client通过回调函数向消息队列服务器RabbitMQ Server返回稍后重试的状态值以及该消息。其中,该消息的消息头中设置有消息的重试次数。
本实施例中,消息队列服务器RabbitMQ Server中可配置多个延迟消息交换机Delay Exchange、多个重试消息交换机Redelivery Exchange和多个延迟消息队列Delay Queue,其中,一个延迟消息交换机Delay Exchange与一个延迟消息队列Delay Queue具有一一对应关系,一个延迟消息队列Delay Queue与一个重试消息交换机Redelivery Exchange建立有绑定的一一对应关系。当接收模块10接收到稍后重试的状态值以及该消息时,发送模块20先根据该消息的消息头设置的重试次数,选择该消息要发回的延迟交换机Delay Exchange。例如,在该消息的消息头设置的重试次数为1时,选择该消息要发回的延迟交换机Delay Exchange为Delay Exchange 1。然后,将该消息发回选择的延迟消息交换机Delay Exchange,并将该消息发送至延迟消息交换机Delay Exchange对应的延迟消息队列Delay Queue。
进一步地,本实施例中,如图4所示,所述发送模块20包括:
判断单元21,用于当所述状态值为稍后重试时,判断所述消息的消息头设置的重试次数是否小于预设的重试次数阈值;
选择单元22,用于在所述重试次数小于所述重试次数阈值时,根据所述重试次数选择所述消息要发回的延迟交换机。
进一步地,所述发送模块20还用于:
在所述重试次数大于所述重试次数阈值时,将所述消息发送至死信消息队列。
当对消息再次消费时,消息不一定会消费成功,有可能还是消费失败,为了避免产生对某一个消息一直进行消费的死循环,本实施例中,预先设置有消息的一个重试次数阈值,例如,设置该重试次数阈值为16,该重试次数阈值可以根据实际情况进行灵活设置,在此不作限制。当接收模块10接收到稍后重试的状态值以及消息时,判断单元21判断该消息的消息头设置的重试次数是否小于预设的重试次数阈值。在该消息的消息头设置的重试次数小于重试次数阈值时,也即说明该消息的消费次数还不多,此时,选择单元22根据该消息的消息头设置的重试次数选择该消息要发回的延迟交换机Delay Exchange,发送模块20将该消息发回选择的延迟消息交换机Delay Exchange,并调用延迟消息交换机Delay Exchange将该消息发送至该延迟消息交换机Delay Exchange对应的延迟消息队列Delay Queue。当消息的消息头设置的重试次数大于重试次数阈值时,也即说明该消息的消费次数已经过多,此时,为了避免进入对该消息一直进行消费处理的死循环,发送模块20将该消息发送至死信消息队列Dead Letter Queue。死信消息队列Dead Letter Queue会永久保存该消费失败的消息,后期业务监控可通过提取死信消息队列Dead Letter Queue中保存的消费失败的消息进行相关处理操作。
进一步地,消息队列服务器RabbitMQ Server中可配置多个重试消息队列Retry Queue,每个重试消息队列Retry Queue都有对应的重试消息队列名称Retry Queue name。并且,消息中携带有对应的重试消息队列名称Retry Queue name,当消息发送至重试消息交换机Redelivery Exchange中后,根据该消息中携带的重试消息队列名称Retry Queue name,将该消息发送至该重试消息队列名称Retry Queue name对应的重试消息队列Retry Queue中,供之后消费客户端RabbitMQ Client获取并消费该消息。
本实施例提出的方案,在消息的消息头设置的重试次数小于预设的重试次数阈值时,发送模块20将该消息发送至选择的延迟消息交换机,并调用该延迟消息交换机将该消息发送至对应的延迟消息队列,对该消息重新进行消费处理,在消息的消息头设置的重试次数大于预设的重试次数阈值时,发送模块20直接将该消息发送至死信消息队列,不再对该消息进行消费处理,避免了进入失败消费的死循环过程,从而进一步提高了消息队列服务器的消息处理效率。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。