实现流量控制的方法、消息主节点、令牌服务器及系统
技术领域
本申请涉及数据通信技术领域,特别涉及实现流量控制的方法、消息主节点、令牌服务器及系统。
背景技术
软件系统中通常采用消息系统实现信息的传输,消息系统可以将信息以消息的形式从软件系统中的一个组件传递到另一个组件。
消息系统的架构一般包括:消息生产者、消息中心和消息消费者。其中,消息生产者用于发送消息,消息消费者用于接收消息。消息中心位于消息生产者和消息消费者之间,用于协调消息生产者和消息消费者之间消息的传送。具体的,消息中心的作用包括接收消息生产者产生的消息,并将接收的消息传递至消息消费者。在一个具体例子中,消息生产者可以发布某话题的消息。这些发布的消息发送至消息中心。消息消费者可以订阅某话题的消息。当消息中心接收到消息生产者发布的某话题的消息后,查询订阅该话题的消息消费者,进而可以将所述接收的消息发送至所述订阅该主题的消息消费者。
消息消费者接收到消息中心发送的消息后,对接收到的消息进行处理。消息消费者处理消息时,往往需要占用某些资源,如数据库、网络专线等。消息中心向消息消费者发送消息的速度越快,消息消费者单位时间内处理的消息数量越多,对资源的占用也越多。为了使得这些资源不被过渡占用,消息中心往往需要控制向消息消费者发送消息的速度,也就是要对消息系统进行流量控制。
消息系统流量控制最典型的做法是限制消息中心单位时间内发送至消息消费者的消息的数量。一种具体的方式例如采用令牌桶算法。所述采用令牌桶算法的方式中,在消息中心中设置一定数量的令牌,并包括:
SS1:当一个消息需要通过消息中心发送至消息消费者时,消息中心申请一个对应该消息的令牌;
SS2:消息中心申请到所述令牌后,发送对应的消息,否则不发送对应消息;
SS3:当所述消息成功发送至消息消费者后,消息中心归还对应令牌。
消息中心中设置的令牌的数量对应单位时间内允许发送至消息消费者的消息的数量。这样,在单位时间内,由于消息消费者接收并处理的消息数量有限,因此对消费者资源的占用被控制在一定程度以内,避免过度占用。
分布式消息系统中,一般至少包括两个消息子中心。对于消息的传输,消息生产者可以将待传输的消息分成若干组,所述消息的每一组发送给一个消息子中心,每个消息子中心负责传输消息单独的一个或几个组。举例来说,如图1所示,一分布式消息系统具有3个消息子中心,分别为消息子中心1、消息子中心2以及消息子中心3。消息生产者A需要将8个消息发布至消息子中心,所述8个消息分别标记为A1、A2、A3、A4、A5、A6、A7和A8,消息生产者B需要将2个消息发布至消息子中心,所述2个消息分别标记为B1和B2。消息生产者A将所述8个消息分成3组并发送给不同的消息子中心。其中,将消息A1、A2和A3作为第一组发送至消息子中心1,消息A4、A5和A6作为第二组发送至消息子中心2,消息A7、A8作为第三组发送至消息子中心3。消息生产者B将消息B1和B2作为一组发送至消息子中心3。每个消息子中心将接收到的消息发送至订阅该话题的消息消费者。消息消费者C在分布式消息系统的消息中心中订阅了A1-A8的消息,则消息消费者C接收从各消息子中心发来的消息A1-A8(这里具体是消息子中心1、2、3分别发来的消息A1-A3,A4-A6,A7-A8)。消息消费者D在分布式消息系统的消息中心中订阅了B1-B2的消息,则消息消费者D接收到各消息子中心发来的消息B1和B2(这里具体是消息子中心3发来的消息B1-B2)。
上述分布式系统中,对于消息消费者来说,处理接收的消息同样占用资源,因此仍需要对消息系统进行流量控制。分布式消息系统中的流量控制,也要保证所有消息子中心单位时间内传输的消息的总量不超过某一个限定值。现有技术中,由于分布式消息系统中各个消息子中心是独立部署的,因此,需要对每一消息子中心进行流量控制。该情形中一种常用的流量控制方法包括对每个消息子中心分配一定令牌数。通常可以按照消息子中心的数量将需要对该分布式消息系统的单位时间内限定的令牌数平均分配到每个消息子中心。例如,分布式消息系统中一共存在4个消息子中心,且分布式消息系统中一共有8个令牌的情况下,现有技术为每个消息子中心分配2个令牌。
在实现本申请过程中,发明人发现现有技术中至少存在如下问题:各消息子中心一般具有不同的转发消息的频率,这将会出现两种情形,一种情形是部分消息子中心因转发速度较快而令牌数量不够使用,这将导致消息生产者发布的消息滞留在消息子中心上或者传输速度变慢;另一种情形是部分消息子中心因转发速度较慢而存在剩余令牌,这将导致部分令牌的浪费。从上述两种情形可以看出,虽然给每个消息子中心分配的额度是相等的,但是由于各消息子中心转发消息的频率不同,导致了实际上令牌分配的“不均衡”以及令牌使用率的降低。
发明内容
本申请实施例的目的是提供实现流量控制的方法、消息主节点、令牌服务器及系统,以提高分布式消息系统令牌的使用率。
为解决上述技术问题,本申请实施例提供一种实现流量控制的方法及系统是这样实现的:
一种实现流量控制的方法,分布式消息系统的至少一个消息子中心为第一消息中心主节点,所述第一消息中心主节点上设置有预设令牌数,所述预设令牌数与所述分布式消息系统的并发限定值相等;
当所述分布式消息系统中第一消息子中心接收到消息生产者发布的消息后,所述方法包括:
第一消息子中心向所述第一消息中心主节点发送申请令牌的申请消息,所述申请消息中申请的令牌数与所述消息生产者发布的消息个数相匹配;
当所述第一消息中心主节点当前可用令牌数不小于第一消息子中心申请的令牌数时,所述第一消息中心主节点返回确认申请令牌的答复消息至第一消息子中心,并将所述当前可用令牌数减去第一消息子中心申请的令牌数后的值更新为所述第一消息中心主节点的当前可用令牌数;
第一消息子中心发送所述消息至消息消费者。
一种实现流量控制的方法,分布式消息系统的至少一个消息子中心为第一消息中心主节点,所述第一消息中心主节点上设置有预设令牌数,所述预设令牌数与所述分布式消息系统的并发限定值相等;
当所述分布式消息系统中第一消息子中心接收到消息生产者发布的消息后,所述方法包括:
第一消息中心主节点接收第一消息子中心发来的申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;
第一消息中心主节点检查当前可用令牌数,当所述当前可用令牌数不小于第一消息子中心申请的令牌数时,返回确认申请令牌的答复消息至第一消息子中心;
第一消息中心主节点将所述当前可用令牌数减去第一消息子中心申请的令牌数后的值更新为当前可用令牌数。
一种实现流量控制的方法,包括:
第一消息子中心接收消息生产者发布的消息;
第一消息子中心向第一消息中心主节点发送申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;
第一消息子中心接收所述第一消息中心主节点返回的确认申请令牌的答复消息;
第一消息子中心发送所述消息至消息消费者。
一种实现流量控制的方法,分布式消息系统的至少一个消息子中心为第一消息中心主节点,所述第一消息中心主节点上设置有预设令牌数,所述预设令牌数与所述分布式消息系统的并发限定值相等;
当所述分布式消息系统中第一消息子中心接收到消息生产者发布的消息后,所述方法包括:
第一消息子中心向所述第一消息中心主节点发送申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;
当所述第一消息中心主节点当前可用令牌数大于零且小于第一消息子中心申请的令牌数时,所述第一消息中心主节点返回答复消息至第一消息子中心,所述答复消息包括所述第一消息子中心可以申请第一令牌数,所述第一令牌数和所述第一消息中心主节点当前可用令牌数相同,所述第一消息中心主节点将所述当前可用令牌数清零;
第一消息子中心发送所述消息至消息消费者,所述消息的个数和第一令牌数相匹配。
一种实现流量控制的方法,分布式消息系统的至少一个消息子中心为第一消息中心主节点,所述第一消息中心主节点上设置有预设令牌数,所述预设令牌数与所述分布式消息系统的并发限定值相等;
当所述分布式消息系统中第一消息子中心接收到消息生产者发布的消息后,所述方法包括:
第一消息中心主节点接收第一消息子中心发来的申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;
第一消息中心主节点检查当前可用令牌数,当所述当前可用令牌数大于零且小于第一消息子中心申请的令牌数时,返回确认申请令牌的答复消息至第一消息子中心;
第一消息中心主节点将所述当前可用令牌数清零。
一种实现流量控制的方法,包括:
第一消息子中心接收消息生产者发布的消息;
第一消息子中心向第一消息中心主节点发送申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;
第一消息子中心接收所述第一消息中心主节点返回的答复消息,所述答复消息包括所述第一消息子中心可以申请第一令牌数,所述第一令牌数和所述第一消息中心主节点当前可用令牌数相同;
第一消息子中心发送所述消息至消息消费者,所述消息的个数和第一令牌数相匹配。
一种实现流量控制的方法,分布式消息系统中至少包括一个第一令牌服务器,所述第一令牌服务器上设置有预设令牌数,所述预设令牌数与所述分布式消息系统的并发限定值相等,所述分布式消息系统至少包括两个消息子中心;
当所述分布式消息系统中第一消息子中心接收到消息生产者发布的消息后,所述方法包括:
第一消息子中心向所述第一令牌服务器发送申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;
当所述第一令牌服务器当前可用令牌数不小于第一消息子中心申请的令牌数时,所述第一令牌服务器返回确认申请令牌的答复消息至第一消息子中心,并将所述当前可用令牌数减去第一消息子中心申请的令牌数后的值更新为所述第一令牌服务器的当前可用令牌数;
第一消息子中心发送所述消息至消息消费者。
一种实现流量控制的方法,分布式消息系统中至少包括一个第一令牌服务器,所述第一令牌服务器上设置有预设令牌数,所述预设令牌数与所述分布式消息系统的并发限定值相等,所述分布式消息系统至少包括两个消息子中心;
当所述分布式消息系统中第一消息子中心接收到消息生产者发布的消息后,所述方法包括:
第一令牌服务器接收第一消息子中心发来的申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;
第一令牌服务器检查当前可用令牌数,当所述当前可用令牌数不小于第一消息子中心申请的令牌数时,返回确认申请令牌的答复消息至第一消息子中心;
第一令牌服务器将所述当前可用令牌数减去第一消息子中心申请的令牌数后的值更新为当前可用令牌数。
一种实现流量控制的方法,包括:
第一消息子中心接收消息生产者发布的消息;
第一消息子中心向第一令牌服务器发送申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;
第一消息子中心接收所述第一令牌服务器返回的确认申请令牌的答复消息;
第一消息子中心发送所述消息至消息消费者。
一种实现流量控制的方法,分布式消息系统中至少包括一个第一令牌服务器,所述第一令牌服务器上设置有预设令牌数,所述预设令牌数与所述分布式消息系统的并发限定值相等,所述分布式消息系统至少包括两个消息子中心;
当所述分布式消息系统中第一消息子中心接收到消息生产者发布的消息后,所述方法包括:
第一消息子中心向所述第一令牌服务器发送申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;
当所述第一令牌服务器当前可用令牌数大于零且小于第一消息子中心申请的令牌数时,所述第一令牌服务器返回答复消息至第一消息子中心,所述答复消息包括所述第一消息子中心可以申请第一令牌数,所述第一令牌数和所述第一令牌服务器当前可用令牌数相同,所述第一令牌服务器将所述当前可用令牌数清零;
第一消息子中心发送所述消息至消息消费者,所述消息的个数和第一令牌数相匹配。
一种实现流量控制的方法,分布式消息系统中至少包括一个第一令牌服务器,所述第一令牌服务器上设置有预设令牌数,所述预设令牌数与所述分布式消息系统的并发限定值相等,所述分布式消息系统至少包括两个消息子中心;
当所述分布式消息系统中第一消息子中心接收到消息生产者发布的消息后,所述方法包括:
第一令牌服务器接收第一消息子中心发来的申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;
第一令牌服务器检查当前可用令牌数,当所述当前可用令牌数大于零且小于第一消息子中心申请的令牌数时,返回确认申请令牌的答复消息至第一消息子中心;
第一令牌服务器将所述当前可用令牌数清零。
一种实现流量控制的方法,包括:
第一消息子中心接收消息生产者发布的消息;
第一消息子中心向第一令牌服务器发送申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;
第一消息子中心接收所述第一令牌服务器返回的答复消息,所述答复消息包括所述第一消息子中心可以申请第一令牌数,所述第一令牌数和所述第一令牌服务器当前可用令牌数相同;
第一消息子中心发送所述消息生产者发布的消息至消息消费者,所述消息的个数和第一令牌数相匹配。
一种实现流量控制的方法,分布式消息系统中的每一个第一消息子中心上均设置有预设令牌数,所述预设令牌数与所述分布式消息系统的并发限定值相等;
当所述分布式消息系统中第一消息子中心接收到消息生产者发布的消息后,所述方法包括:
当所述第一消息子中心当前可用令牌数不小于与所述消息生产者发布的消息个数匹配的令牌数时,所述第一消息子中心将所述当前可用令牌数减去与所述消息生产者发布的消息个数匹配的令牌数的值更新为所述当前可用令牌数;
所述第一消息子中心将所述当前可用令牌数同步至所述分布式消息系统中其他消息子中心上;
第一消息子中心发送所述消息至消息消费者。
一种实现流量控制的系统,包括消息生产者,第一消息中心主节点,第一消息子中心和消息消费者,其中,
消息生产者,用于向分布式消息系统中第一消息子中心发布消息;
第一消息中心主节点,所述第一消息中心主节点上设置有预设令牌数,所述预设令牌数与分布式消息系统的并发限定值相等;所述第一消息中心主节点用于接收第一消息子中心发送的申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;用于检查当前可用令牌数,当所述当前可用令牌数不小于第一消息子中心申请的令牌数时,返回确认申请令牌的答复消息至第一消息子中心;并将所述当前可用令牌数减去第一消息子中心申请的令牌数后的值更新为当前可用令牌数;所述第一消息中心主节点为所述分布式消息系统消息子中心中的至少一个;
第一消息子中心,用于接收消息生产者发布的消息;向所述第一消息中心主节点发送申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;用于接收所述第一消息中心主节点返回的确认申请令牌的答复消息;还用于发送所述消息至消息消费者;
消息消费者,用于接收第一消息子中心发送的消息。
一种消息中心主节点,包括,
接收单元,用于接收第一消息子中心发来的申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;
检查单元,用于检查当前可用令牌数;
确认单元,用于当所述当前可用令牌数不小于第一消息子中心申请的令牌数时,返回确认申请令牌的答复消息至第一消息子中心;
更新单元,用于将所述当前可用令牌数减去第一消息子中心申请的令牌数后的值更新为当前可用令牌数。
一种消息子中心,包括,
第一接收单元,用于接收消息生产者发布的消息;
申请单元,用于向第一消息中心主节点发送申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;
第二接收单元,用于接收所述第一消息中心主节点返回的确认申请令牌的答复消息;
发送单元,用于发送所述消息至消息消费者。
一种实现流量控制的系统,包括消息生产者,第一消息中心主节点,第一消息子中心和消息消费者,其中,
消息生产者,用于向分布式消息系统中第一消息子中心发布消息;
第一消息中心主节点,所述第一消息中心主节点上设置有预设令牌数,所述预设令牌数与分布式消息系统的并发限定值相等;所述第一消息中心主节点用于接收第一消息子中心发送的申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;用于检查当前可用令牌数,当所述当前可用令牌数大于零且小于第一消息子中心申请的令牌数时,返回确认申请令牌的答复消息至第一消息子中心;并将所述当前可用令牌数清零;所述第一消息中心主节点为所述分布式消息系统消息子中心中的至少一个;
第一消息子中心,用于接收消息生产者发布的消息;向第一消息中心主节点发送申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;接收所述第一消息中心主节点返回的答复消息,所述答复消息包括所述第一消息子中心可以申请第一令牌数,所述第一令牌数和所述第一消息中心主节点当前可用令牌数相同;发送所述消息至消息消费者,所述消息的个数和第一令牌数相匹配;
消息消费者,用于接收第一消息子中心发送的消息。
一种消息中心主节点,包括,
接收单元,用于接收第一消息子中心发来的申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;
检查单元,用于检查当前可用令牌数;
确认单元,用于当所述当前可用令牌数大于零且小于第一消息子中心申请的令牌数时,返回确认申请令牌的答复消息至第一消息子中心;
清零单元,用于将所述当前可用令牌数清零。
一种消息子中心,包括,
第一接收单元,用于接收消息生产者发布的消息;
申请单元,用于向第一消息中心主节点发送申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;
第二接收单元,用于接收所述第一消息中心主节点返回的答复消息,所述答复消息包括所述第一消息子中心可以申请第一令牌数,所述第一令牌数和所述第一消息中心主节点当前可用令牌数相同;
发送单元,用于发送所述消息至消息消费者,所述消息的个数和第一令牌数相匹配。
一种实现流量控制的系统,包括消息生产者,第一令牌服务器,第一消息子中心和消息消费者,其中,
消息生产者,用于向分布式消息系统中第一消息子中心发布消息;
第一令牌服务器,所述第一令牌服务器上设置有预设令牌数,所述预设令牌数与所述分布式消息系统的并发限定值相等;所述第一令牌服务器用于接收第一消息子中心发送的申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;当所述第一令牌服务器当前可用令牌数不小于消息子中心申请的令牌数时,所述第一令牌服务器返回确认申请令牌的答复消息至消息子中心;并将所述当前可用令牌数减去消息子中心申请的令牌数后的值更新为所述第一令牌服务器的当前可用令牌数;
第一消息子中心,用于接收消息生产者发布的消息;向第一令牌服务器发送申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;所述第一消息子中心还用于接收所述第一令牌服务器返回的确认申请令牌的答复消息;并发送所述消息至消息消费者;
消息消费者,用于接收第一消息子中心发送的消息。
一种令牌服务器,包括,
接收单元,用于接收第一消息子中心发来的申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;
检查单元,用于检查当前可用令牌数;
确认单元,当所述当前可用令牌数不小于第一消息子中心申请的令牌数时,用于返回确认申请令牌的答复消息至第一消息子中心;
更新单元,用于将所述当前可用令牌数减去第一消息子中心申请的令牌数后的值更新为当前可用令牌数。
一种消息子中心,包括,
第一接收单元,用于接收消息生产者发布的消息;
申请单元,用于向第一令牌服务器发送申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;
第二接收单元,用于接收所述第一令牌服务器返回的确认申请令牌的答复消息;
发送单元,用于发送所述消息至消息消费者。
一种实现流量控制的系统,包括消息生产者,第一令牌服务器,第一消息子中心和消息消费者,其中,
消息生产者,用于向分布式消息系统中第一消息子中心发布消息;
第一令牌服务器,所述第一令牌服务器上设置有预设令牌数,所述预设令牌数与所述分布式消息系统的并发限定值相等;接收第一消息子中心发来的申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;检查当前可用令牌数,当所述当前可用令牌数大于零且小于第一消息子中心申请的令牌数时,返回确认申请令牌的答复消息至第一消息子中心;将所述当前可用令牌数清零;
第一消息子中心,接收消息生产者发布的消息;向第一令牌服务器发送申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;接收所述第一令牌服务器返回的答复消息,所述答复消息包括所述第一消息子中心可以申请第一令牌数,所述第一令牌数和所述第一令牌服务器当前可用令牌数相同;发送所述消息至消息消费者,所述消息的个数和第一令牌数相匹配;
消息消费者,用于接收第一消息子中心发送的消息。
一种令牌服务器,包括,
接收单元,用于接收第一消息子中心发来的申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;
检查单元,用于检查当前可用令牌数;
确认单元,当所述当前可用令牌数大于零且小于第一消息子中心申请的令牌数时,用于返回确认申请令牌的答复消息至第一消息子中心;
清零单元,用于将所述当前可用令牌数清零。
一种消息子中心,包括,
第一接收单元,用于接收消息生产者发布的消息;
申请单元,用于向第一令牌服务器发送申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;
第二接收单元,用于接收所述第一令牌服务器返回的答复消息,所述答复消息包括所述第一消息子中心可以申请第一令牌数,所述第一令牌数和所述第一令牌服务器当前可用令牌数相同;
发送单元,用于发送所述消息至消息消费者,所述消息的个数和第一令牌数相匹配。
一种实现流量控制的系统,包括消息生产者,第一消息子中心和消息消费者,其中,
消息生产者,用于向分布式消息系统中第一消息子中心发布消息;
第一消息子中心,接收消息生产者发布的消息;当所述第一消息子中心当前可用令牌数不小于与所述消息生产者发布的消息个数匹配的令牌数时,所述第一消息子中心将所述当前可用令牌数减去与所述消息生产者发布的消息个数匹配的令牌数的值更新为所述当前可用令牌数;所述第一消息子中心将所述当前可用令牌数同步至所述分布式消息系统中其他消息子中心上;第一消息子中心发送所述消息至消息消费者;
消息消费者,用于接收第一消息子中心发送的消息。
一种消息子中心,包括,
接收消息单元,用于接收消息生产者发布的消息;
令牌更新单元,当第一消息子中心当前可用令牌数不小于与所述消息生产者发布的消息个数匹配的令牌数时,所述令牌更新单元用于将所述当前可用令牌数减去与所述消息生产者发布的消息个数匹配的令牌数后的值更新为当前可用令牌数;
令牌同步单元,将所述当前可用令牌数同步至所述分布式消息系统中其他消息子中心上;
发送消息单元,用于发送所述消息至消息消费者。
本申请实施例提供的实现流量控制的方法及系统,利用上述本申请的方法实施例,设置分布式消息系统中的至少一个消息子中心为第一消息中心主节点,通过所述第一消息中心主节点控制整个分布式消息系统单位时间内限定的令牌数。相对于现有技术中的将单位时间内限定的令牌数平均分配给每个消息子中心,克服了令牌分配的“不均衡”的缺陷,提高了令牌的利用率。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本申请分布式消息系统传递消息的原理图;
图2是本申请实现流量控制方法第一实施例的流程图;
图3是本申请实现流量控制方法第一实施例应用场景流程图;
图4是本申请实现流量控制方法第七实施例的流程图;
图5是本申请实现流量控制方法第七实施例应用场景流程图;
图6是本申请实现流量控制方法第十三实施例的流程图;
图7是本申请实现流量控制方法第十三实施例应用场景流程图。
具体实施方式
本申请实施例提供一种实现流量控制的方法、消息主节点、令牌服务器及系统。
为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
首先介绍本申请实现流量控制方法的第一实施例。
所述分布式消息系统的至少一个消息子中心为第一消息中心主节点,所述第一消息中心主节点上设置有预设令牌数,所述预设令牌数与所述分布式消息系统的并发限定值相等。
本申请实施例中的消息子中心可以是服务器,也可以是其他电子设备。在本申请的一个实施例中,可以以消息子中心为服务器来举例说明。本发明实施例中各消息子中心服务器的作用包括接收消息生产者产生的消息,并将接收的消息传递至消息消费者,以及负责申请和归还令牌的工作。
分布式消息系统中至少包括两个消息子中心。在本发明实施例中,消息子中心的至少一个为第一消息中心主节点,所述第一消息中心主节点上设置有预设令牌数,所述预设令牌数与所述分布式消息系统的并发限定值相等。所述第一消息中心主节点的作用包括接收每一个消息子中心的令牌申请,并返回确认申请令牌的答复消息,以及根据消息子中心申请令牌的个数更新第一消息中心主节点当前可用令牌数。第一消息中心主节点可以指定,也可以通过计算来确定,例如可以采用环状Hash算法计算来确定,具体的,在本发明实施例中,以采用环状Hash算法确定第一消息中心主节点为例进行说明,包括步骤S101-S106:
步骤S101:给每个消息子中心设置一个令牌桶,每个消息子中心令牌桶的名称相同;
步骤S102:获取每个消息子中心的地址并生成消息子中心地址集,并将所述消息子中心地址集发送给每个消息子中心;
步骤S103:每个消息子中心分别计算所述消息子中心地址集中每个地址的Hash值,按照Hash值由大至小排序,并将最大Hash值和最小Hash值相连,形成Hash环;
步骤S104:计算所述令牌桶名称的Hash值;
步骤S105:根据令牌桶名称的Hash值,从所述Hash环中选取符合以下要求的两个相邻地址:其中一个地址的Hash值大于所述令牌桶名称的Hash值,另一个地址的Hash值小于所述令牌桶名称的Hash值;
步骤S106:选取所述相邻地址中的一个或两个地址所对应的消息子中心作为第一消息中心主节点。
所述环状Hash算法中,各消息子中心计算的每个消息子中心地址的Hash值是相同的,以致各消息子中心选取的第一消息中心主节点也是相同的。需要说明的是,本发明实施例可以使用环状Hash算法计算获取第一消息中心主节点,但是不只限于使用环状Hash算法,其他的能够使各消息中心计算并获取一致的第一消息中心主节点的方法均可以替代所述环状Hash算法。
当所述分布式消息系统中第一消息子中心接收到消息生产者发布的消息后,如图2所示,该方法包括:
步骤S201:第一消息子中心向所述第一消息中心主节点发送申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配。
分布式消息系统中,接收到消息生产者发布的消息后,第一消息子中心向所述第一消息中心主节点发送申请令牌的申请消息。所述申请消息可以包括所述第一消息子中心申请令牌的数量,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配。例如,每传递一个消息需要1个令牌,如果消息生产者向第一消息子中心发布4个消息,则与所述4个消息相匹配的令牌数为4,即第一消息子中心需要向第一消息中心主节点申请4个令牌。再例如,每传递一个消息需要两个令牌,如果消息生产者向第一消息子中心发布4个消息,则与所述4个消息相匹配的令牌数为8,即第一消息子中心需要向第一消息中心主节点申请8个令牌。所述申请消息还可以包括申请令牌的第一消息子中心的地址,所述地址用于在下述步骤S202中,第一消息中心主节点按照所述地址返回确认申请令牌的答复消息至第一消息子中心。
步骤S202:当所述第一消息中心主节点当前可用令牌数不小于第一消息子中心申请的令牌数时,所述第一消息中心主节点返回确认申请令牌的答复消息至第一消息子中心,并将所述当前可用令牌数减去第一消息子中心申请的令牌数后的值更新为所述第一消息中心主节点的当前可用令牌数。
所述第一消息中心主节点接收到第一消息子中心的申请信息后,检查所述第一消息中心主节点的当前可用令牌数。当所述当前可用令牌数大于等于第一消息子中心申请的令牌数时,所述第一消息中心主节点按照申请信息中第一消息子中心的地址返回确认申请令牌的答复消息。同时,将所述当前可用令牌数减去消息子中心申请的令牌数,并将减去消息子中心申请的令牌数的值更新为所述第一消息中心主节点的当前可用令牌数。
当设置所述分布式系统中至少两个消息子中心为第一消息中心主节点时,接收第一消息子中心申请信息的第一消息中心主节点在更新所述第一消息中心主节点的当前可用令牌数之后,还包括:所述第一消息中心主节点将所述当前可用令牌数同步至其他第一消息中心主节点上,以使所有第一消息中心主节点上的当前可用令牌数一致。
步骤S203:第一消息子中心发送所述消息至消息消费者。
第一消息子中心接收到第一消息中心主节点返回的确认申请令牌的答复消息后,可以将所述接收的生产者发布的消息发送至订阅该消息的消息消费者。
后续,当消息消费者接收到所述消息后,所述消息消费者返回确认接收消息的答复消息至第一消息子中心;第一消息子中心返回确认发送消息的答复至所述第一消息中心主节点。这样,第一消息中心主节点可以根据第一消息子中心发来的确认发送消息的答复,将当前可用令牌数更新为所述当前可用令牌数加上第一消息子中心申请的令牌数的值。
利用上述本申请的方法实施例一,设置分布式消息系统中的至少一个消息子中心为第一消息中心主节点,这样,第一消息中心主节点可以按照消息子中心的需要发出相应数量的令牌,从而满足消息子中心的发送消息的需要。此外,第一消息中心主节点可以及时回收令牌。这样,所述第一消息中心主节点可以控制整个分布式消息系统单位时间内限定的令牌数。相对于现有技术中的将单位时间内限定的令牌数平均分配给每个消息子中心,本申请实施例可以克服了令牌分配的“不均衡”的缺陷,提高了令牌的利用率。例如,一分布式消息系统的并发限定值为12,所述系统包括3个消息子中心,分别为消息子中心1、消息子中心2和消息子中心3。按照现有技术的方法实现流量控制,于是给每个消息子中心分配4个令牌。如果消息子中心1单位时间内可以传递3个令牌,消息子中心2可以传递4个令牌,消息子中心3可以传递5个令牌。根据上述令牌的分配,那么在单位时间内,消息子中心1剩余一个令牌,消息子中心3缺少一个令牌。相对于现有技术,本发明实施例一方法中,确定消息子中心1为第一消息中心主节点,消息子中心1可以申请3个令牌,消息子中心2可以申请4个,消息子中心3可以申请5个,那么在单位时间内,整个分布式消息系统一共传递了12个令牌,与分布式消息系统的并发限定值相同,相对于现有技术的方法,提高了令牌的利用率。
下面结合具体场景说明上述本申请方法实施例一的实现过程,可以结合图3加以理解。
如图3中的a部分所示,在一个分布式消息系统中,包括四个消息子中心,分别为消息子中心1、消息子中心2、消息子中心3以及消息子中心4。各消息子中心采用环状Hash算法计算确定第一消息中心主节点,如图3中的b部分所示,所述第一消息中心主节点为消息子中心2。所述分布式消息系统的并发限定值为12,在所述第一消息中心主节点上设置12个令牌。如图3中的c部分所示,消息生产者A向消息子中心1发布消息,与所述消息个数相匹配的令牌数为3。如图3中的d部分所示,消息子中心1接收到消息生产者A发布的消息后,向所述第一消息中心主节点发送申请信息,所述申请消息中申请的令牌数与消息生产者A向消息子中心1发布的消息个数相匹配,所述申请信息还包括消息子中心1的地址信息。如图3中的e部分所示,第一消息中心主节点接收到消息子中心1发送的申请信息后,检查当前剩余令牌数,经检查,第一消息中心主节点当前剩余令牌数为12,大于所述消息子中心1申请的令牌数3。第一消息中心主节点根据消息子中心1发送的申请信息中的地址信息,返回确认申请令牌的答复消息至消息子中心1。同时,将所述当前可用令牌数减去消息子中心1申请的令牌数后的值更新为第一消息中心主节点的当前可用令牌数,在本实施例中,第一消息中心主节点的当前可用令牌数更新为9个。如图3中的f部分所示,消息子中心1接收到第一消息中心主节点发送的确认申请令牌的答复消息后,发送所述消息至消息消费者B。后续的,消息消费者B接收所述消息后,返回确认接收消息的答复消息至消息子中心1。消息子中心1接收消息消费者B返回的答复消息后,返回确认发送消息的答复消息至第一消息中心主节点。第一消息中心主节点将更新当前可用令牌,在当前令牌上加上消息子中心1申请的令牌数。在本发明实施例中,第一消息中心主节点更新后的令牌数为12。
需要注意的是,本方法实施例一中,所述分布式消息系统包括还包括第二消息中心主节点时,在所述第一消息子中心发送所述消息至消息消费者之前,还包括:所述第一消息中心主节点将所述当前可用令牌数同步至第二消息中心主节点上。
下面介绍本方法实施例对应的实现流量控制的系统第一实施例,所述系统包括消息生产者,第一消息中心主节点,第一消息子中心和消息消费者,其中,
消息消息生产者,用于向分布式消息系统中第一消息子中心发布消息;
第一消息中心主节点,所述第一消息中心主节点上设置有预设令牌数,所述预设令牌数与分布式消息系统的并发限定值相等;所述第一消息中心主节点用于接收第一消息子中心发送的申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;用于检查当前可用令牌数,当所述当前可用令牌数不小于第一消息子中心申请的令牌数时,返回确认申请令牌的答复消息至第一消息子中心;并将所述当前可用令牌数减去第一消息子中心申请的令牌数后的值更新为当前可用令牌数;所述第一消息中心主节点为所述分布式消息系统消息子中心中的至少一个;
第一消息子中心,用于接收消息生产者发布的消息;向所述第一消息中心主节点发送申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;用于接收所述第一消息中心主节点返回的确认申请令牌的答复消息;还用于发送所述消息至消息消费者;
消息消费者,用于接收第一消息子中心发送的消息。
上述第一方法实施例,考虑第一消息中心主节点为主的步骤,可以演化为第二方法实施例,包括:
分布式消息系统的至少一个消息子中心为第一消息中心主节点,所述第一消息中心主节点上设置有预设令牌数,所述预设令牌数与所述分布式消息系统的并发限定值相等;
当所述分布式消息系统中第一消息子中心接收到消息生产者发布的消息后,所述方法包括:
第一消息中心主节点接收第一消息子中心发来的申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;
第一消息中心主节点检查当前可用令牌数,当所述当前可用令牌数不小于第一消息子中心申请的令牌数时,返回确认申请令牌的答复消息至第一消息子中心;
第一消息中心主节点将所述当前可用令牌数减去第一消息子中心申请的令牌数后的值更新为当前可用令牌数。
上述第二方法实施例,对应的第一消息中心主节点第一实施例包括:
接收单元,用于接收第一消息子中心发来的申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;
检查单元,用于检查当前可用令牌数;
确认单元,用于当所述当前可用令牌数不小于第一消息子中心申请的令牌数时,返回确认申请令牌的答复消息至第一消息子中心;
更新单元,用于将所述当前可用令牌数减去第一消息子中心申请的令牌数后的值更新为当前可用令牌数。
上述第一方法实施例,考虑消息子中心为主的步骤,可以演化为第三方法实施例,包括:
第一消息子中心接收消息生产者发布的消息;
第一消息子中心向第一消息中心主节点发送申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;
第一消息子中心接收所述第一消息中心主节点返回的确认申请令牌的答复消息;
第一消息子中心发送所述消息至消息消费者。
上述第三方法实施例,对应的消息子中心第一实施例包括:
第一接收单元,用于接收消息生产者发布的消息;
申请单元,用于向第一消息中心主节点发送申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;
第二接收单元,用于接收所述第一消息中心主节点返回的确认申请令牌的答复消息;
发送单元,用于发送所述消息至消息消费者。
上述第一方法实施例,考虑到第一消息中心主节点当前可用令牌数大于零且小于第一消息子中心申请的令牌数的情况时,可以演化为第四方法实施例,包括:
分布式消息系统的至少一个消息子中心为第一消息中心主节点,所述第一消息中心主节点上设置有预设令牌数,所述预设令牌数与所述分布式消息系统的并发限定值相等;
当所述分布式消息系统中第一消息子中心接收到消息生产者发布的消息后,所述方法包括:
第一消息子中心向所述第一消息中心主节点发送申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配的令牌数;
当所述第一消息中心主节点当前可用令牌数大于零且小于第一消息子中心申请的令牌数时,所述第一消息中心主节点返回答复消息至第一消息子中心,所述答复消息包括所述第一消息子中心可以申请第一令牌数,所述第一令牌数和所述第一消息中心主节点当前可用令牌数相同,所述第一消息中心主节点将所述当前可用令牌数清零;
第一消息子中心发送所述消息至消息消费者,所述消息的个数和第一令牌数相匹配。
后续,当消息消费者接收到所述消息后,所述消息消费者返回确认接收消息的答复消息至第一消息子中心;第一消息子中心返回确认发送消息的答复至所述第一消息中心主节点。这样,第一消息中心主节点可以根据第一消息子中心发来的确认发送消息的答复,将当前可用令牌数更新为所述当前可用令牌数加上第一消息子中心申请的令牌数的值。
该实施例中,考虑到第一消息子中心申请的令牌数大于第一消息中心主节点的当前可用令牌数的情况,本方法实施例解决的方案是将第一消息中心主节点的当前可用令牌全部分配给第一消息子中心,这样,第一消息子中心可以先将与所述当前可用令牌数匹配的消息个数发送至消息消费者。当后续第一消息中心主节点当前令牌数更新后,可以将剩余的令牌数分配给第一消息子中心,这样,第一消息子中心可以将所述消息的剩余部分发送至消息消费者。
下面介绍本方法实施例对应的实现流量控制的系统第二实施例,所述系统包括消息生产者,第一消息中心主节点,第一消息子中心和消息消费者,其中,
消息生产者,用于向分布式消息系统中第一消息子中心发布消息;
第一消息中心主节点,所述第一消息中心主节点上设置有预设令牌数,所述预设令牌数与分布式消息系统的并发限定值相等;所述第一消息中心主节点用于接收第一消息子中心发送的申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;用于检查当前可用令牌数,当所述当前可用令牌数大于零且小于第一消息子中心申请的令牌数时,返回确认申请令牌的答复消息至第一消息子中心;并将所述当前可用令牌数清零;所述第一消息中心主节点为所述分布式消息系统消息子中心中的至少一个;
第一消息子中心,用于接收消息生产者发布的消息;向第一消息中心主节点发送申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;接收所述第一消息中心主节点返回的答复消息,所述答复消息包括所述第一消息子中心可以申请第一令牌数,所述第一令牌数和所述第一消息中心主节点当前可用令牌数相同;发送所述消息至消息消费者,所述消息的个数和第一令牌数相匹配;
消息消费者,用于接收第一消息子中心发送的消息。
上述第四方法实施例,考虑第一消息中心主节点为主的步骤,可以演化为第五方法实施例,包括:
分布式消息系统的至少一个消息子中心为第一消息中心主节点,所述第一消息中心主节点上设置有预设令牌数,所述预设令牌数与所述分布式消息系统的并发限定值相等;
当所述分布式消息系统中第一消息子中心接收到消息生产者发布的消息后,所述方法包括:
接收第一消息子中心发来的申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;
检查当前可用令牌数,当所述当前可用令牌数大于零且小于第一消息子中心申请的令牌数时,返回确认申请令牌的答复消息至第一消息子中心;
将所述当前可用令牌数清零。
上述第五方法实施例,对应的消息子中心第二实施例包括:
接收单元,用于接收第一消息子中心发来的申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;
检查单元,用于检查当前可用令牌数;
确认单元,用于当所述当前可用令牌数大于零且小于第一消息子中心申请的令牌数时,返回确认申请令牌的答复消息至第一消息子中心;
清零单元,用于将所述当前可用令牌数清零。
上述第四方法实施例,考虑消息子中心为主的步骤,可以演化为第六方法实施例,包括:
第一消息子中心接收消息生产者发布的消息;
向第一消息中心主节点发送申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;
接收所述第一消息中心主节点返回的答复消息,所述答复消息包括所述第一消息子中心可以申请第一令牌数,所述第一令牌数和所述第一消息中心主节点当前可用令牌数相同;
发送所述消息至消息消费者,所述消息的个数和第一令牌数相匹配。
上述第六方法实施例,对应的消息子中心第二实施例包括:
第一接收单元,用于接收消息生产者发布的消息;
申请单元,用于向第一消息中心主节点发送申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;
第二接收单元,用于接收所述第一消息中心主节点返回的答复消息,所述答复消息包括所述第一消息子中心可以申请第一令牌数,所述第一令牌数和所述第一消息中心主节点当前可用令牌数相同;
发送单元,用于发送所述消息至消息消费者,所述消息的个数和第一令牌数相匹配。
考虑用单独的令牌服务器控制整个分布式消息系统单位时间内限定的令牌数,上述第一方法实施例可以演化为第七方法实施例,具体包括:
所述分布式消息系统至少包括一个第一令牌服务器,所述第一令牌服务器上设置有预设令牌数,所述预设令牌数与所述分布式消息系统的并发限定值相等;
当所述分布式消息系统中第一消息子中心接收到消息生产者发布的消息后,如图4所示,所述方法包括:
步骤S401:第一消息子中心向所述第一令牌服务器发送申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;
步骤S402:当所述第一令牌服务器当前可用令牌数不小于第一消息子中心申请的令牌数时,所述第一令牌服务器返回确认申请令牌的答复消息至第一消息子中心,并将所述当前可用令牌数减去第一消息子中心申请的令牌数后的值更新为所述第一令牌服务器的当前可用令牌数;
步骤S403:第一消息子中心发送所述消息至消息消费者。
后续,当消息消费者接收到所述消息后,所述消息消费者返回确认接收消息的答复消息至第一消息子中心;第一消息子中心返回确认发送消息的答复至所述第一令牌服务器。这样,第一令牌服务器可以根据第一消息子中心发来的确认发送消息的答复,将当前可用令牌数更新为所述当前可用令牌数加上第一消息子中心申请的令牌数的值。
上述本申请的第七方法实施例中,通过设置单独的第一令牌服务器,用于管理分布式消息系统中单位时间内限定的令牌数。本申请第七方法实施例避免了本发明第一方法实施例中被设置为第一消息中心主节点的消息子中心既要负责传递消息,又要负责管理令牌,从而降低了所述消息子中心的工作量。此外,第一令牌服务器还可以及时回收令牌。
下面结合具体场景说明上述本申请第七方法实施例的实现过程,可以结合图5加以理解。
如图5中的a部分所示,在一个分布式消息系统中,包括三个消息子中心以及至少一个第一令牌服务器,所述三个消息子中心包括消息子中心1、消息子中心2以及消息子中心3,所述第一令牌服务器用于管理分布式消息系统单位时间内限定的令牌数。在本实施例中,分布式消息系统在单位时间内的并发限定值为12,相应地在第一令牌服务器上设置12个令牌。如图5中的b部分所示,消息生产者A向消息子中心2发布消息,与所述消息相匹配的令牌数为3个。如图5中的c部分所示,消息子中心2接收到消息生产者A发布的消息后,向所述第一令牌服务器发送申请信息,所述申请消息包括传递消息生产者A发布的消息所需的令牌数,所述申请信息还包括消息子中心2的地址信息。如图5中的d部分所示,第一令牌服务器接收到消息子中心2发送的申请消息后,检查当前剩余令牌数,经检查,第一令牌服务器当前剩余令牌数为12,大于所述消息子中心2申请的令牌数3。第一令牌服务器根据消息子中心2发送的申请消息中的地址信息,返回确认申请令牌的答复消息至消息子中心2。同时,将所述当前可用令牌数减去消息子中心2申请的令牌数后的值更新为第一令牌服务器的当前可用令牌数,在本实施例中,第一令牌服务器的当前可用令牌数更新为9个。如图5中的e部分所示,消息子中心2接收到第一令牌服务器发送的确认申请令牌的答复消息后,将所述消息发送至消息消费者B。
后续的,消息消费者B接收到所述消息后,返回确认接收消息的答复消息至消息子中心2。消息子中心2接收消息消费者B返回的答复消息后,返回确认发送消息的答复消息至第一令牌服务器。第一令牌服务器将更新当前可用令牌,在当前令牌上加上消息子中心2申请的令牌数。在本发明实施例中,第一消息中心主节点更新后的令牌数为12。
需要注意的是,本申请第七实施例中的第一令牌服务器可以设置于分布式消息系统中的任意一个消息子中心上。被设置为第一令牌服务器的消息子中心的作用包括管理分布式消息系统单位时间内限定的令牌数。所述消息子中心可以暂停传递消息。另外,所述分布式消息系统还包括第二令牌服务器时,在所述第一消息子中心发送所述接收到消息生产者发布的消息至消息消费者之前,还包括:所述第一令牌服务器将所述当前可用令牌数同步至第二令牌服务器上。
下面介绍本方法实施例对应的实现流量控制的系统第三实施例,所述系统包括消息生产者,第一令牌服务器,第一消息子中心和消息消费者,其中,
消息生产者,用于向分布式消息系统中第一消息子中心发布消息;
第一令牌服务器,所述第一令牌服务器上设置有预设令牌数,所述预设令牌数与所述分布式消息系统的并发限定值相等;所述第一令牌服务器用于接收第一消息子中心发送的申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;当所述第一令牌服务器当前可用令牌数不小于消息子中心申请的令牌数时,所述第一令牌服务器返回确认申请令牌的答复消息至消息子中心;并将所述当前可用令牌数减去消息子中心申请的令牌数后的值更新为所述第一令牌服务器的当前可用令牌数;
第一消息子中心,用于接收消息生产者发布的消息;向第一令牌服务器发送申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;所述第一消息子中心还用于接收所述第一令牌服务器返回的确认申请令牌的答复消息;并发送所述消息至消息消费者;
消息消费者,用于接收第一消息子中心发送的消息。
上述第七方法实施例,考虑第一令牌服务器为主的步骤,可以演化为第八方法实施例:
分布式消息系统中至少包括一个第一令牌服务器,所述第一令牌服务器上设置有预设令牌数,所述预设令牌数与所述分布式消息系统的并发限定值相等,所述分布式消息系统至少包括两个消息子中心;
当所述分布式消息系统中第一消息子中心接收到消息生产者发布的消息后,所述方法包括:
第一令牌服务器接收第一消息子中心发来的申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;
第一令牌服务器检查当前可用令牌数,当所述当前可用令牌数不小于第一消息子中心申请的令牌数时,返回确认申请令牌的答复消息至第一消息子中心;
第一令牌服务器将所述当前可用令牌数减去第一消息子中心申请的令牌数后的值更新为当前可用令牌数。
上述第八方法实施例,对应的第一令牌服务器第一实施例,包括:
接收单元,用于接收第一消息子中心发来的申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;
检查单元,用于检查当前可用令牌数;
确认单元,当所述当前可用令牌数不小于第一消息子中心申请的令牌数时,用于返回确认申请令牌的答复消息至第一消息子中心;
更新单元,用于将所述当前可用令牌数减去第一消息子中心申请的令牌数后的值更新为当前可用令牌数。
上述第七方法实施例,考虑消息子中心为主的步骤,可以演化为第九方法实施例:
第一消息子中心接收消息生产者发布的消息;
第一消息子中心向第一令牌服务器发送申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;
第一消息子中心接收所述第一令牌服务器返回的确认申请令牌的答复消息;
第一消息子中心发送所述消息至消息消费者。
上述第九方法实施例,对应的消息子中心第三实施例,包括:
第一接收单元,用于接收消息生产者发布的消息;
申请单元,用于向第一令牌服务器发送申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;
第二接收单元,用于接收所述第一令牌服务器返回的确认申请令牌的答复消息;
发送单元,用于发送所述消息至消息消费者。
上述第七方法实施例,考虑到第一令牌服务器当前可用令牌数大于零且小于第一消息子中心申请的令牌数的情况时,可以演化为第十方法实施例:
分布式消息系统中至少包括一个第一令牌服务器,所述第一令牌服务器上设置有预设令牌数,所述预设令牌数与所述分布式消息系统的并发限定值相等,所述分布式消息系统至少包括两个消息子中心;
当所述分布式消息系统中第一消息子中心接收到消息生产者发布的消息后,所述方法包括:
第一消息子中心向所述第一令牌服务器发送申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;
当所述第一令牌服务器当前可用令牌数大于零且小于第一消息子中心申请的令牌数时,所述第一令牌服务器返回答复消息至第一消息子中心,所述答复消息包括所述第一消息子中心可以申请第一令牌数,所述第一令牌数和所述第一令牌服务器当前可用令牌数相同,所述第一令牌服务器将所述当前可用令牌数清零;
第一消息子中心发送所述消息至消息消费者,所述消息的个数和第一令牌数相匹配。
后续,当消息消费者接收到所述消息后,所述消息消费者返回确认接收消息的答复消息至第一消息子中心;第一消息子中心返回确认发送消息的答复至所述第一令牌服务器。这样,第一令牌服务器可以根据第一消息子中心发来的确认发送消息的答复,将当前可用令牌数更新为所述当前可用令牌数加上第一消息子中心申请的令牌数的值。
该实施例中,考虑到第一消息子中心申请的令牌数大于第一令牌服务器的当前可用令牌数的情况,本方法实施例解决的方案是将第一令牌服务器的当前可用令牌全部分配给第一消息子中心,这样,第一消息子中心可以先将与所述当前可用令牌数匹配的消息个数发送至消息消费者。当后续第一令牌服务器当前令牌数更新后,可以将剩余的令牌数分配给第一消息子中心,这样,第一消息子中心可以将所述消息的剩余部分发送至消息消费者。
下面介绍本方法实施例对应的实现流量控制的系统第四实施例,包括消息生产者,第一令牌服务器,第一消息子中心和消息消费者,其中,
消息生产者,用于向分布式消息系统中第一消息子中心发布消息;
第一令牌服务器,所述第一令牌服务器上设置有预设令牌数,所述预设令牌数与所述分布式消息系统的并发限定值相等;接收第一消息子中心发来的申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;检查当前可用令牌数,当所述当前可用令牌数大于零且小于第一消息子中心申请的令牌数时,返回确认申请令牌的答复消息至第一消息子中心;将所述当前可用令牌数清零;
第一消息子中心,接收消息生产者发布的消息;向第一令牌服务器发送申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;接收所述第一令牌服务器返回的答复消息,所述答复消息包括所述第一消息子中心可以申请第一令牌数,所述第一令牌数和所述第一令牌服务器当前可用令牌数相同;发送所述消息至消息消费者,所述消息的个数和第一令牌数相匹配;
消息消费者,用于接收第一消息子中心发送的消息。
上述第十实施例,考虑第一令牌服务器为主的步骤,可以演化为第十一方法实施例:
分布式消息系统中至少包括一个第一令牌服务器,所述第一令牌服务器上设置有预设令牌数,所述预设令牌数与所述分布式消息系统的并发限定值相等,所述分布式消息系统至少包括两个消息子中心;
当所述分布式消息系统中第一消息子中心接收到消息生产者发布的消息后,所述方法包括:
接收第一消息子中心发来的申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;
检查当前可用令牌数,当所述当前可用令牌数大于零且小于第一消息子中心申请的令牌数时,返回确认申请令牌的答复消息至第一消息子中心;
将所述当前可用令牌数清零。
上述第十一方法实施例,对应的第一令牌服务器第二实施例,包括:
接收单元,用于接收第一消息子中心发来的申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;
检查单元,用于检查当前可用令牌数;
确认单元,当所述当前可用令牌数大于零且小于第一消息子中心申请的令牌数时,用于返回确认申请令牌的答复消息至第一消息子中心;
清零单元,用于将所述当前可用令牌数清零。
上述第十实施例,考虑消息子中心为主的步骤,可以演化为第十二方法实施例:
第一消息子中心接收消息生产者发布的消息;
第一消息子中心向第一令牌服务器发送申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;
第一消息子中心接收所述第一令牌服务器返回的答复消息,所述答复消息包括所述第一消息子中心可以申请第一令牌数,所述第一令牌数和所述第一令牌服务器当前可用令牌数相同;
第一消息子中心发送所述消息至消息消费者,所述消息的个数和第一令牌数相匹配。
上述第十二方法实施例,对应的消息子中心第四实施例,包括:
第一接收单元,用于接收消息生产者发布的消息;
申请单元,用于向第一令牌服务器发送申请令牌的申请消息,所述申请消息中申请的令牌数与消息生产者发布的消息个数相匹配;
第二接收单元,用于接收所述第一令牌服务器返回的答复消息,所述答复消息包括所述第一消息子中心可以申请第一令牌数,所述第一令牌数和所述第一令牌服务器当前可用令牌数相同;
发送单元,用于发送所述消息至消息消费者,所述消息的个数和第一令牌数相匹配。
考虑到每个消息子中心均可以管理令牌,可以演化为第十三方法实施例,具体包括:
分布式消息系统中的每一个第一消息子中心上均设置有预设令牌数,所述预设令牌数与所述分布式消息系统的并发限定值相等;
当所述分布式消息系统中第一消息子中心接收到消息生产者发布的消息后,如图6所示,所述方法包括:
步骤S601:当所述第一消息子中心当前可用令牌数不小于与所述消息生产者发布的消息个数匹配的令牌数时,所述第一消息子中心将所述当前可用令牌数减去与所述消息生产者发布的消息个数匹配的令牌数的值更新为所述当前可用令牌数;
步骤S602:所述第一消息子中心将所述当前可用令牌数同步至所述分布式消息系统中其他消息子中心上;
步骤S603:第一消息子中心发送所述消息至消息消费者。
上述本申请的第十三方法实施例,通过在每个消息子中心上设置和分布式消息系统并发限定值相等的令牌数,并保持每个消息子中心上当前剩余的令牌数同步,相对于本申请其他方法实施例,各消息子中心无需向第一消息中心主节点或者第一令牌服务器申请令牌,各消息子中心可以独立管理令牌。
下面结合具体场景说明上述本申请第十三方法实施例的实现过程,可以结合图7加以理解。
如图7中的a部分所示,在一个分布式消息系统中,包括三个消息子中心,分别为消息子中心1、消息子中心2以及消息子中心3。所述分布式消息系统单位时间内的并发限定值为12,相应地,在每个消息子中心上均配置了12个令牌。如图7中的b部分所示,消息生产者A向消息子中心2发布消息,传递所述消息需要4个令牌。如图7中的c部分所示,消息子中心2接收到消息消费者A发布的消息后,检查当前剩余令牌数,经检查,消息子中心2当前剩余令牌数为12,大于传递所述消息生产者A发布的消息所需的令牌数4。同时,将所述当前可用令牌数减去传递消息生产者A发布的消息所需的令牌数后的值更新为消息子中心2的当前可用令牌数,在本实施例中,消息子中心2的当前可用令牌数更新为8个。如图7中的d部分所示,消息子中心2完成当前可用令牌数的更新后,将所述当前可用令牌数同步至所述分布式消息系统中其他消息子中心上,相应地,所述消息子中心1和消息子中心3的令牌数也更新为8个。如图7中的e部分所示,消息子中心2根据将所述消息发送至消息消费者B。
下面介绍本方法实施例对应的实现流量控制的系统第五实施例,所述系统包括消息生产者,第一消息子中心和消息消费者,其中,
消息生产者,用于向分布式消息系统中第一消息子中心发布消息;
第一消息子中心,接收消息生产者发布的消息;当所述第一消息子中心当前可用令牌数不小于与所述消息生产者发布的消息个数匹配的令牌数时,所述第一消息子中心将所述当前可用令牌数减去与所述消息生产者发布的消息个数匹配的令牌数的值更新为所述当前可用令牌数;所述第一消息子中心将所述当前可用令牌数同步至所述分布式消息系统中其他消息子中心上;第一消息子中心发送所述消息至消息消费者;
消息消费者,用于接收第一消息子中心发送的消息。
上述系统第五实施例对应的消息子中心第五实施例,包括:
接收消息单元,用于接收消息生产者发布的消息;
令牌更新单元,当第一消息子中心当前可用令牌数不小于与所述消息生产者发布的消息个数匹配的令牌数时,所述令牌更新单元用于将所述当前可用令牌数减去与所述消息生产者发布的消息个数匹配的令牌数后的值更新为当前可用令牌数;
令牌同步单元,将所述当前可用令牌数同步至所述分布式消息系统中其他消息子中心上;
发送消息单元,用于发送所述消息至消息消费者。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片2。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog2。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。
本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。该计算机软件产品可以包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。该计算机软件产品可以存储在内存中,内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括短暂电脑可读媒体(transitory media),如调制的数据信号和载波。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本申请可用于众多通用或专用的计算机系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
虽然通过实施例描绘了本申请,本领域普通技术人员知道,本申请有许多变形和变化而不脱离本申请的精神,希望所附的权利要求包括这些变形和变化而不脱离本申请的精神。