一种事务消息的投递方法、装置、系统及消息服务器与流程

文档序号:17159856发布日期:2019-03-20 00:31阅读:149来源:国知局
一种事务消息的投递方法、装置、系统及消息服务器与流程

本发明涉及计算机技术领域,特别涉及一种事务消息的投递方法、装置、系统及消息服务器。



背景技术:

事务是由发送消息的动作与发送者业务逻辑动作组成。事务消息的发送包括两个阶段:第一个阶段是发送事务消息到消息服务器;第二个阶段是发送事务状态到消息服务器,如果事务状态是提交,消息服务器会将事务消息投递到订阅者,如果事务状态是回滚,消息服务器会取消投递事务消息。

但是,由于网络信号差等原因,上述第二个阶段常常无法实现,即消息服务器无法接收到事务状态。

鉴于此,消息服务器会对事务消息进行回查,以确认是否投递事务消息。而如何提高回查的准确性,提高事务消息的投递效率是技术人员一直关注度的问题。



技术实现要素:

鉴于此,本发明实施例提供了一种事务消息的投递方法、装置、系统及消息服务器。

第一方面,本发明实施例提供了一种事务消息的投递方法,包括:

接收消息服务器针对事务消息发送的回查请求,其中,所述回查请求中包括:对象的状态变更记录;

获取所述对象的状态提交记录;

根据所述状态变更记录和所述状态提交记录,确定回查结果;

将所述回查结果发送给所述消息服务器,以使所述消息服务器根据所述回查结果确定是否投递所述事务消息。

优选地,

所述状态变更记录包括:第1次变更后的状态至第m次变更后的状态;

所述状态提交记录包括:第1次提交后的状态至第n次提交后的状态;

其中,m、n为大于1的整数;

所述根据所述状态变更记录和所述状态提交记录,确定回查结果,包括:

确定所述状态变更记录中每次变更后的状态是否均与所述状态提交记录中每次提交后的状态相同,如果是,确定所述回查结果为投递所述事务消息,否则,确定所述回查结果为不投递所述事务消息。

优选地,

所述状态变更记录包括:第一状态至当前状态;

其中,所述第一状态至当前状态为e次连续的变更对应的变更后的状态;由第一次变更起,所述对象到达所述当前状态需要经过f次变更,且f大于e;

所述状态提交记录包括:第1次提交后的状态至第h次提交后的状态;

当不存在a、b、c、d,使得第a次提交后的状态至第b次提交后的状态、第c次提交后的状态至第d次提交后的状态均与所述第一状态至当前状态相同时,

所述根据所述状态变更记录和所述状态提交记录,确定回查结果,包括:

确定是否存在q、s,使得第q次提交后的状态至第s次提交后的状态与所述第一状态至当前状态相同,如果是,确定所述回查结果为投递所述事务消息,否则,确定所述回查结果为不投递所述事务消息。

优选地,

在所述接收消息服务器针对事务消息发送的回查请求之前,进一步包括:

开启事务;

根据所述事务,变更所述对象的状态;

根据变更后所述对象的状态,确定所述状态变更记录;

向所述消息服务器发送所述事务消息,其中,所述事务消息中包括:所述状态变更记录。

优选地,

在所述向所述消息服务器发送所述事务消息之后,在所述接收消息服务器针对事务消息发送的回查请求之前,进一步包括:

确定所述事务是否被执行,如果是,提交所述事务,更新所述状态提交记录,否则,回滚所述事务。

优选地,

所述状态变更记录包括:第1次变更后的状态至第r次变更后的状态;

所述状态提交记录包括:第1次提交后的状态至第t次提交后的状态;

其中,r、t为大于1的整数;

所述根据所述状态变更记录和所述状态提交记录,确定回查结果,包括:

确定r个变更后的状态是否均与对应顺序的提交后的状态相同,如果是,

确定是否存在k,使得第k次提交后的状态与第r次变更后的状态相同、且r<k≤t,如果是,

确定所述回查结果为不投递所述事务消息。

第二方面,本发明实施例提供了一种事务消息的投递方法,包括:

针对事务消息向事务消息的投递装置发送回查请求,其中,所述回查请求中包括:对象的状态变更记录,以使所述事务消息的投递装置根据所述状态变更记录确定回查结果;

接收所述事务消息的投递装置发送的所述回查结果;

根据所述回查结果确定是否投递所述事务消息。

优选地,

在所述针对事务消息向事务消息的投递装置发送回查请求之前,进一步包括:

接收所述事务消息的投递装置发送的所述事务消息,其中,所述事务消息中包括:所述状态变更记录。

优选地,

在所述接收所述事务消息的投递装置发送的所述事务消息之后,在所述针对事务消息向事务消息的投递装置发送回查请求之前,进一步包括:

确定当前时刻与接收到所述事务消息的时刻的时间间隔;

当所述时间间隔大于预设的时间阈值、且在所述时间间隔内未接收到所述事务消息的投递装置发送的针对所述事务消息的事务状态时,执行所述针对事务消息向事务消息的投递装置发送回查请求;

其中,所述事务状态包括:提交,或,回滚。

优选地,

所述根据所述回查结果确定是否投递所述事务消息,包括:

当所述回查结果为投递所述事务消息时,投递所述事务消息;

或,

所述根据所述回查结果确定是否投递所述事务消息,包括:

当所述回查结果为不投递所述事务消息时,删除所述事务消息。

第三方面,本发明实施例提供了一种事务消息的投递装置,包括:

接收单元,用于接收消息服务器针对事务消息发送的回查请求,其中,所述回查请求中包括:对象的状态变更记录;

获取单元,用于获取所述对象的状态提交记录;

确定单元,用于根据所述状态变更记录和所述状态提交记录,确定回查结果;

发送单元,用于将所述回查结果发送给所述消息服务器,以使所述消息服务器根据所述回查结果确定是否投递所述事务消息。

优选地,

所述状态变更记录包括:第1次变更后的状态至第m次变更后的状态;

所述状态提交记录包括:第1次提交后的状态至第n次提交后的状态;

其中,m、n为大于1的整数;

所述确定单元,用于确定m个变更后的状态是否均与对应顺序的提交后的状态相同,如果是,确定所述回查结果为投递所述事务消息,否则,确定所述回查结果为不投递所述事务消息。

优选地,

所述状态变更记录包括:目标状态和所述目标状态经过一次变更后得到的当前状态;

所述状态提交记录包括:第1次提交后的状态至第h次提交后的状态;

当与所述当前状态相同的提交后的状态的数量大于1,且重复出现的提交后的状态的种类小于2时,

所述确定单元,用于确定是否存在g,使得第g-1次提交后的状态与所述目标状态相同、第g次提交后的状态与所述当前状态相同,如果是,确定所述回查结果为投递所述事务消息,否则,确定所述回查结果为不投递所述事务消息;

其中,h、g为大于1的整数,1<g≤h。

优选地,

进一步包括:

变更单元,用于开启事务;根据所述事务,变更所述对象的状态;根据变更后所述对象的状态,确定所述状态变更记录;向所述消息服务器发送所述事务消息,其中,所述事务消息中包括:所述状态变更记录。

优选地,

所述变更单元,进一步用于确定所述事务是否被执行,如果是,提交所述事务,更新所述状态提交记录,否则,回滚所述事务。

优选地,

所述状态变更记录包括:第1次变更后的状态至第r次变更后的状态;

所述状态提交记录包括:第1次提交后的状态至第t次提交后的状态;

其中,r、t为大于1的整数;

所述确定单元,用于确定r个变更后的状态是否均与对应顺序的提交后的状态相同,如果是,确定是否存在k,使得第k次提交后的状态与第r次变更后的状态相同、且r<k≤t,如果是,确定所述回查结果为不投递所述事务消息。

第四方面,本发明实施例提供了一种消息服务器,包括:

发送单元,用于针对事务消息向事务消息的投递装置发送回查请求,其中,所述回查请求中包括:对象的状态变更记录,以使所述事务消息的投递装置根据所述状态变更记录确定回查结果;

第一接收单元,用于接收所述事务消息的投递装置发送的所述回查结果;

第一确定单元,用于根据所述回查结果确定是否投递所述事务消息。

优选地,

进一步包括:

第二接收单元,用于接收所述事务消息的投递装置发送的所述事务消息,其中,所述事务消息中包括:所述状态变更记录。

优选地,

进一步包括:

第二确定单元,用于确定当前时刻与接收到所述事务消息的时刻的时间间隔;当所述时间间隔大于预设的时间阈值、且在所述时间间隔内未接收到所述事务消息的投递装置发送的针对所述事务消息的事务状态时,触发所述发送单元;

其中,所述事务状态包括:提交,或,回滚。

优选地,

所述第一确定单元,用于当所述回查结果为投递所述事务消息时,投递所述事务消息;

或,

所述第一确定单元,用于当所述回查结果为不投递所述事务消息时,删除所述事务消息。

第五方面,本发明实施例提供了一种事务消息的投递系统,包括:上述任一实施例所述的事务消息的投递装置和上述任一实施例所述的消息服务器。

本发明实施例采用的上述至少一个技术方案能够达到以下有益效果:事务消息的投递方法对应的回查逻辑简单,只涉及对象的状态变更记录和对象的状态提交记录的判断。无论状态机流转关系如何变化,回查逻辑保持不变,维护成本低,并且具有较高的准确性。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明一个实施例提供的一种事务消息的投递方法的流程图;

图2是本发明一个实施例提供的一种状态机的结构示意图;

图3是本发明另一个实施例提供的一种事务消息的投递方法的流程图;

图4是本发明又一个实施例提供的一种事务消息的投递方法的流程图;

图5是本发明再一个实施例提供的一种事务消息的投递方法的流程图;

图6是本发明一个实施例提供的一种事务消息的投递装置的结构示意图;

图7是本发明一个实施例提供的一种消息服务器的结构示意图;

图8是本发明一个实施例提供的一种事务消息的投递系统的结构示意图;

图9是本发明一个实施例提供的另一种事务消息的投递方法的流程图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

如图1所示,本发明实施例提供了一种事务消息的投递方法,应用于事务消息的投递装置,该方法可以包括以下步骤:

步骤101:接收消息服务器针对事务消息发送的回查请求,其中,回查请求中包括:对象的状态变更记录。

回查请求可以是事务消息本身,也可以是携带事务消息标识的请求。对象的状态变更记录记录对象的状态的变更过程,其中包含对象的至少两个变更后的状态,对象可以为交易单、报销单等。

在实际应用场景中,对象的状态变更记录可以利用状态机进行表示,通过状态机可以获知对象在生命周期中各个状态的迁移。

如图2所示,是一个交易单对应的状态机。由图2可知,交易单从创建到完成,状态的变化过程为“a→b→c→d→b→c→e”,则该对象的状态变更记录可以为“abcdbce”。

进一步地,回查请求中还可以包括与事务消息对应的对象的状态。

需要说明的是,交易单由创建到状态a视为一次变更。

步骤102:获取对象的状态提交记录。

从数据库中获取对象的状态提交记录,该状态提交记录记录对象的状态的提交过程。与状态变更记录类似,状态提交记录也可以通过状态机进行表示。

步骤103:根据状态变更记录和状态提交记录,确定回查结果。

步骤104:将回查结果发送给消息服务器,以使消息服务器根据回查结果确定是否投递事务消息。

该方法的回查逻辑简单,只涉及对象的状态变更记录和对象的状态提交记录的判断。无论对象的状态流转关系如何变化,该方法的回查逻辑保持不变,维护成本低,具有较高的准确性。

步骤103至少可以通过以下两种方式实现:

方式1:

在本发明的一个实施例中,状态变更记录包括:第1次变更后的状态至第m次变更后的状态;

状态提交记录包括:第1次提交后的状态至第n次提交后的状态;

其中,m、n为大于1的整数;

步骤103包括:

确定m个变更后的状态是否均与对应顺序的提交后的状态相同,如果是,确定回查结果为投递事务消息,否则,确定回查结果为不投递事务消息。

例如,通过英文字母表示对象的状态,当m=4时,第一次变更后的状态为a,第二次变更后的状态为b,第三次变更后的状态为c,第四次变更后的状态为d,则状态变更记录可以为“abcd”,还可以为“dcba”,还可以为“cabd”。

由此可以看出,状态变更记录中变更后的状态并不一定按照变更顺序从前到后依次排列,还可以遵循其他的规则。状态提交记录与其类似,此处不再赘述。

需要说明的是,在该方法中,状态变更记录与状态提交记录需要遵循相同的规则。例如,第一次提交后的状态为a,第二次提交后的状态为b,第三次提交后的状态为c,第四次提交后的状态为e,则状态提交记录为“abce”,沿用上例,对应地,状态变更记录为“abcd”。如果状态提交记录为“dcba”,则状态变更记录为“ecba”。

其中,事务消息与第m次变更后的状态相对应。例如,状态变更记录按照变更顺序从前到后依次排列,事务消息中包含的状态变更记录为“abcdef”,其对应的是对象由状态e向状态f变更;事务消息中包含的状态变更记录为“abcd”,其对应的是对象由状态c向状态d变更。

在本发明实施例中,回查结果包括“投递事务消息或不投递事务消息”。在实际应用场景中,回查结果还可以包括“事务状态为提交或事务状态为回滚”,还可以包括“m个变更后的状态均与对应顺序的提交后的状态相同或m个变更后的状态不是均与对应顺序的提交后的状态相同”。

由于状态变更记录包含了第1次变更后的状态到第m次变更后的状态(事务消息与第m次变更相对应),因此,方式1能够避免对象的状态循环变更导致的回查结果错误。

方式2:

为了降低对象的状态经过多次变更导致的状态变更记录过长对回查请求传输过程的影响,在本发明的一个实施例中,

状态变更记录包括:第一状态至当前状态;

其中,第一状态至当前状态为e次连续的变更对应的变更后的状态;由第一次变更起,对象到达当前状态需要经过f次变更,且f大于e;

状态提交记录包括:第1次提交后的状态至第h次提交后的状态;

当不存在a、b、c、d,使得第a次提交后的状态至第b次提交后的状态、第c次提交后的状态至第d次提交后的状态均与第一状态至当前状态相同时,

根据状态变更记录和状态提交记录,确定回查结果,包括:

确定是否存在q、s,使得第q次提交后的状态至第s次提交后的状态与第一状态至当前状态相同,如果是,确定回查结果为投递事务消息,否则,确定回查结果为不投递事务消息。

例如,状态变更记录为“dc”,状态变更记录为“abcdcefc”,状态变更记录中“dc”并未重复出现,因此可采用该方法进行判断。在本发明实施例中,存在q=4、s=5。

在方式2中,为了加快回查请求的传输速度,状态变更记录无需包含当前状态之前对象的所有状态。但是,状态变更记录中包含的当前状态之前对象的部分状态,应当保证回查的准确性。

另外,在本发明实施例中,状态变更记录还可以为“cdc”、“bcdc”等,其回查结果与状态变更记录为“dc”时相同。

在本发明的一个实施例中,在接收消息服务器针对事务消息发送的回查请求之前,该方法还包括:

开启事务;

根据事务,变更对象的状态;

根据变更后对象的状态,确定状态变更记录;

向消息服务器发送事务消息,其中,事务消息中包括:状态变更记录。

参考图2,以对象由状态b向状态c变更为例,可以按照变更的先后顺序,将对象的状态拼接得到状态变更记录。基于此,经过上述变更后,状态变更记录为“abc”。与上述方式1和方式2相对应,采用不同的方式时,对应的状态变更记录可能存在差异。

在本发明的一个实施例中,在向消息服务器发送事务消息之后,在接收消息服务器针对事务消息发送的回查请求之前,该方法包括:

确定事务是否被执行,如果是,提交事务,更新状态提交记录,否则,回滚事务。

事务是否被执行即变更是否完成,如果完成,需要将事务本地提交,并更新数据库中存储的状态提交记录。例如,上述对象由状态b向状态c变更,当对象本地提交后,状态提交记录变更为“abc”,如果事务未被执行,状态提交记录仍然为“ab”。

为了避免投递重复的事务消息,在本发明的一个实施例中,状态变更记录包括:第1次变更后的状态至第r次变更后的状态;

状态提交记录包括:第1次提交后的状态至第t次提交后的状态;

其中,r、t为大于1的整数;

根据状态变更记录和状态提交记录,确定回查结果,包括:

确定r个变更后的状态是否均与对应顺序的提交后的状态相同,如果是,

确定是否存在k,使得第k次提交后的状态与第r次变更后的状态相同、且r<k≤t,如果是,

确定回查结果为不投递事务消息。

例如,状态变更记录为“abcd”,状态提交记录为“abcdbcd”,其中,第1次-第4次变更后的状态分别与第1次-第4次提交后的状态相同,根据前述实施例,本应确定回查结果为投递事务消息。但是,考虑到状态d后续又出现了,为了降低重复投递对订阅用户的影响,在本发明实施例中,确定回查结果为不投递事务消息。例如,状态d对应账户存在问题,通过事务消息通知用户即可,不需要重复告知。

如图3所示,本发明实施例以方式1为例,对事务消息的投递方法进行详细的说明,该方法包括:

步骤301:开启事务。

以图2所示的状态机中状态c向状态d的变更为例,该事物的目的是将对象的状态由c变更为d。

步骤302:根据事务,变更对象的状态。

步骤303:根据变更后对象的状态,确定状态变更记录。

确定状态变更记录为“abcd”。

步骤304:向消息服务器发送事务消息,其中,事务消息中包括:状态变更记录。

步骤305:确定事务是否被执行,如果是,执行步骤306,否则,执行步骤307。

步骤306:提交事务,更新状态提交记录,执行步骤308。

当事务完成本地提交后,状态提交记录变更为“abcd”。

步骤307:回滚事务。

当事务回滚时,说明对象的状态仍然为c,状态提交记录为“abc”。

步骤308:接收消息服务器针对事务消息发送的回查请求,其中,回查请求中包括:对象的状态变更记录;状态变更记录包括:第1次变更后的状态至第m次变更后的状态,m为大于1的整数。

步骤309:获取对象的状态提交记录,其中,状态提交记录包括:第1次提交后的状态至第n次提交后的状态,n为大于1的整数。。

步骤310:确定状态变更记录中每次变更后的状态是否均与状态提交记录中每次提交后的状态相同,如果是,执行步骤311,否则,执行步骤312。

当事务提交时,执行步骤311,当事务回滚时,执行步骤312。

步骤311:确定回查结果为投递事务消息,执行步骤313。

步骤312:确定回查结果为不投递事务消息。

步骤313:将回查结果发送给消息服务器,以使消息服务器根据回查结果确定是否投递事务消息。

如图4所示,本发明实施例提供了一种事务消息的投递方法,应用于消息服务器,包括:

步骤401:针对事务消息向事务消息的投递装置发送回查请求,其中,回查请求中包括:对象的状态变更记录,以使事务消息的投递装置根据状态变更记录确定回查结果;

步骤402:接收事务消息的投递装置发送的回查结果;

步骤403:根据回查结果确定是否投递事务消息。

该方法在回查请求中添加对象的状态变更记录,使得无论对象的状态流转关系如何变化,回查逻辑保持不变,维护成本低,具有较高的准确性。

需要说明的是,应用于消息服务器一侧的事务消息的投递方法与应用于事务消息的投递装置一侧的事务消息的投递方法相对应,上述实施例中对于应用于事务消息的投递装置一侧的事务消息的投递方法的描述,同样适用于应用于消息服务器一侧的事务消息的投递方法,以下不再赘述。

在本发明的一个实施例中,在针对事务消息向事务消息的投递装置发送回查请求之前,进一步包括:

接收事务消息的投递装置发送的事务消息,其中,事务消息中包括:状态变更记录。

在发送针对事务消息的回查请求时,可以将对应的事务消息直接以回查请求的形式发送给事务消息的投递装置。

在实际应用场景中,在接收到事务消息之后,可能长时间没有接收到针对该事务消息的事务状态,导致该事务消息无法及时处理,进而影响整个业务进程。

为了应对上述情况,在本发明的一个实施例中,在接收事务消息的投递装置发送的事述针对事务消息向事务消息的投递装置发送回查请求之前,该方法还包括:

确定当前时刻与接收到事务消息的时刻的时间间隔;

当时间间隔大于预设的时间阈值、且在时间间隔内未接收到事务消息的投递装置发送的针对事务消息的事务状态时,执行针对事务消息向事务消息的投递装置发送回查请求;

其中,事务状态包括:提交,或,回滚。

当接收到事务消息的事务状态为提交时,向订阅该事务消息的用户投递该事务消息,当接收到事务消息的事务状态为回滚时,可以删除该事物消息。

在本发明的一个实施例中,根据回查结果确定是否投递事务消息,包括:

当回查结果为投递事务消息时,投递事务消息;

在本发明的一个实施例中,根据回查结果确定是否投递事务消息,包括:

当回查结果为不投递事务消息时,删除事务消息。

另外,当回查结果为不投递事务消息时,还可以标记或者搁置该事务消息。

在本发明的一个实施例中,如图5所示,事务消息的投递方法包括:

步骤501:接收事务消息的投递装置发送的事务消息,其中,事务消息中包括:状态变更记录。

步骤502:确定当前时刻与接收到事务消息的时刻的时间间隔,当时间间隔大于预设的时间阈值、且在时间间隔内未接收到事务消息的投递装置发送的针对事务消息的事务状态时,执行步骤503,其中,事务状态包括:提交,或,回滚。

步骤503:针对事务消息向事务消息的投递装置发送回查请求,其中,回查请求中包括:对象的状态变更记录,以使事务消息的投递装置根据状态变更记录确定回查结果。

步骤504:接收事务消息的投递装置发送的回查结果,当回查结果为投递事务消息时,执行步骤505,当回查结果为不投递事务消息时,执行步骤506。

步骤505:投递事务消息。

步骤506:删除事务消息。

如图6所示,本发明实施例提供了一种事务消息的投递装置,包括:

接收单元601,用于接收消息服务器针对事务消息发送的回查请求,其中,回查请求中包括:对象的状态变更记录;

获取单元602,用于获取对象的状态提交记录;

确定单元603,用于根据状态变更记录和状态提交记录,确定回查结果;

发送单元604,用于将回查结果发送给消息服务器,以使消息服务器根据回查结果确定是否投递事务消息。

在本发明的一个实施例中,状态变更记录包括:第1次变更后的状态至第m次变更后的状态;

状态提交记录包括:第1次提交后的状态至第n次提交后的状态;

其中,m、n为大于1的整数;

确定单元603,用于确定状态变更记录中每次变更后的状态是否均与状态提交记录中每次提交后的状态相同,如果是,确定回查结果为投递事务消息,否则,确定回查结果为不投递事务消息。

在本发明的一个实施例中,状态变更记录包括:第一状态至当前状态;

其中,第一状态至当前状态为e次连续的变更对应的变更后的状态;由第一次变更起,对象到达当前状态需要经过f次变更,且f大于e;

状态提交记录包括:第1次提交后的状态至第h次提交后的状态;

当不存在a、b、c、d,使得第a次提交后的状态至第b次提交后的状态、第c次提交后的状态至第d次提交后的状态均与第一状态至当前状态相同时,

确定单元603,用于确定是否存在q、s,使得第q次提交后的状态至第s次提交后的状态与第一状态至当前状态相同,如果是,确定回查结果为投递事务消息,否则,确定回查结果为不投递事务消息。

在本发明的一个实施例中,该装置还包括:

变更单元,用于开启事务;根据事务,变更对象的状态;根据变更后对象的状态,确定状态变更记录;向消息服务器发送事务消息,其中,事务消息中包括:状态变更记录。

在本发明的一个实施例中,变更单元,进一步用于确定事务是否被执行,如果是,提交事务,更新状态提交记录,否则,回滚事务。

在本发明的一个实施例中,状态变更记录包括:第1次变更后的状态至第r次变更后的状态;

状态提交记录包括:第1次提交后的状态至第t次提交后的状态;

其中,r、t为大于1的整数;

确定单元603,用于确定r个变更后的状态是否均与对应顺序的提交后的状态相同,如果是,确定是否存在k,使得第k次提交后的状态与第r次变更后的状态相同、且r<k≤t,如果是,确定回查结果为不投递事务消息。

如图7所示,本发明实施例提供了一种消息服务器,包括:

发送单元701,用于针对事务消息向事务消息的投递装置发送回查请求,其中,回查请求中包括:对象的状态变更记录,以使事务消息的投递装置根据状态变更记录确定回查结果;

第一接收单元702,用于接收事务消息的投递装置发送的回查结果;

第一确定单元703,用于根据回查结果确定是否投递事务消息。

在本发明的一个实施例中,该消息服务器还包括:

第二接收单元,用于接收事务消息的投递装置发送的事务消息,其中,事务消息中包括:状态变更记录。

在本发明的一个实施例中,该消息服务器还包括:

第二确定单元,用于确定当前时刻与接收到事务消息的时刻的时间间隔;当时间间隔大于预设的时间阈值、且在时间间隔内未接收到事务消息的投递装置发送的针对事务消息的事务状态时,触发发送单元;

其中,事务状态包括:提交,或,回滚。

在本发明的一个实施例中,第一确定单元703,用于当回查结果为投递事务消息时,投递事务消息。

在本发明的一个实施例中,第一确定单元703,用于当回查结果为不投递事务消息时,删除事务消息。

如图8所示,本发明实施例提供了一种事务消息的投递系统,包括:上述任一实施例的事务消息的投递装置801和上述任一实施例的消息服务器802。

如图9所示,本发明实施例以事务消息的投递系统为例,对事务消息的投递方法进行详细的描述,包括:

步骤901:消息服务器针对事务消息向事务消息的投递装置发送回查请求。

步骤902:事务消息的投递装置接收回查请求,其中,回查请求中包括:对象的状态变更记录。

步骤903:事务消息的投递装置获取对象的状态提交记录。

步骤904:事务消息的投递装置根据状态变更记录和状态提交记录,确定回查结果,并将回查结果发送给消息服务器。

步骤905:消息服务器接收回查结果,并根据回查结果确定是否投递事务消息。

在该系统中,引入对象的状态变更记录,使得事务消息的回查逻辑简单明了。当对象的状态的流转关系发生变化时,回查逻辑不需要额外维护。该系统能够使对象的状态变更有迹可循,提升了可读性,具备更强的拓展能力。

在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(programmablelogicdevice,pld)(例如现场可编程门阵列(fieldprogrammablegatearray,fpga))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片pld上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logiccompiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(hardwaredescriptionlanguage,hdl),而hdl也并非仅有一种,而是有许多种,如abel(advancedbooleanexpressionlanguage)、ahdl(alterahardwaredescriptionlanguage)、confluence、cupl(cornelluniversityprogramminglanguage)、hdcal、jhdl(javahardwaredescriptionlanguage)、lava、lola、myhdl、palasm、rhdl(rubyhardwaredescriptionlanguage)等,目前最普遍使用的是vhdl(very-high-speedintegratedcircuithardwaredescriptionlanguage)与verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。

控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(applicationspecificintegratedcircuit,asic)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:arc625d、atmelat91sam、microchippic18f26k20以及siliconelabsc8051f320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。

上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。

为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。

本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1