发明内容
有鉴于此,本发明提供一种JMS规范的Pub/Sub消息模型的消息生产消费方法,以避免消息阻塞,保证消息的实效性,避免重要消息丢失的风险。
本申请的技术方案是这样实现的:
一种JMS规范的Pub/Sub消息模型的消息生产消费方法,包括:
接收消息生产者所创建的当前消息;
获取所述当前消息的权效向量,并计算所述当前消息的权效值;
当所述消息主题中的消息未满时:
将所述当前消息的权效向量加入到权效向量空间,并将所述当前消息放入所述消息主题,以使订阅此消息主题的消费者接收并消费;
当所述消息主题中的消息已满时:
获取当前权效向量空间中所有消息的权效值,并计算当前权效向量空间的权效阈值;
在所述权效向量空间中,将权效值低于所述权效阈值的消息进行标记;
比较所述当前消息的权效值与所述权效阈值的大小,若所述当前消息的权效值大于所述权效阈值,则从所述消息主题中删除一条已标记消息,并同时从权效向量空间中删除该条已标记消息的权效向量;
将所述当前消息的权效向量加入到权效向量空间,并将所述当前消息放入所述消息主题,以使订阅此消息主题的消费者接收并消费。
进一步,比较所述当前消息的权效值与所述权效阈值的大小后,若所述当前消息的权效值小于或等于所述权效阈值,则丢弃所述当前消息。
进一步:
所述权效向量空间为四维向量组成的向量空间;
其中,所述四维向量包括消息ID、重要度、时效度和置换标识。
进一步:
所述重要度根据如下公式获得:
F1(x)=Ax×Wx
其中,x为任意一条消息,Ax为消息x的优先级,Wx为消息x的发送源权重,F1(x)为消息x的重要度;
所述时效度根据如下公式获得:
其中,Tx为消息x的发送时间,F2(x)为消息x的时效度。
进一步,所述的根据所述当前消息的权效向量计算所述当前消息的权效值包括:
根据所述当前消息的重要度和时效度计算所述当前消息的权效值,所述当前消息的权效值依据如下公式计算:
w(x0)=αF1(x0)+βF2(x0)
其中,x0表示当前消息,w(x0)为所述当前消息的权效值,α为重权参数,β为时权参数,F1(x0)为所述当前消息的重要度,F2(x0)为所述当前消息的时效度。
进一步,当前权效向量空间中所有消息的权效值的获取包括:
依据如下公式获取当前权效向量空间中所有消息的权效值:
w(x)=αF1(x)+βF2(x)
其中,x表示任意一条消息,w(x)为消息x的权效值,α为重权参数,β为时权参数,F1(x)为消息x的重要度,F2(x)为消息x的时效度。
进一步,所述计算当前权效向量空间的权效阈值包括:
依据如下公式计算所述当前权效向量空间的权效阈值:
其中,n为当前权效向量空间中的权效向量总数,w(x)为第i个消息的权效值,εi为第i个消息的加权参数,且有:
进一步,所述加权参数依据如下公式确定:
其中,W为当前消息主题中所有消息的权效值之和,即
wi为第i个消息的权效值,n为当前权效向量空间中的权效向量总数,即当前消息主题中的消息数量。
进一步,根据权效最佳置换算法EWOPT,从所述消息主题中删除一条已标记消息,并同时从权效向量空间中删除该条已标记消息的权效向量。
进一步,所述权效最佳置换算法EWOPT为:在已标记的消息中,随机删除一条消息,并同时删除该条所删除消息的权效向量,所述消息主题中排列在所删除消息之后的消息依次前移,以使所述当前消息进入所述消息主题。
从上述方案可以看出,本发明的JMS规范的Pub/Sub消息模型的消息生产消费方法,根据发送源权重、消息重要度以及发送时间等参数,对Pub/Sub消息模型中的消息设立了权效向量,权效向量综合了所述的发送源权重、消息重要度以及发送时间等参数,进而反映了权效向量所对应消息的重要程度。通过本发明的方法,能够将消息主题中所有的消息的权效向量存储于权效向量空间中,进而能够在权效向量空间中反应出消息主题中所有消息的综合的重要程度,并由权效向量空间的向量值所反映。当消息主题中的消息存储满时,通过本发明的方法,通过设定的权效阈值和权效向量空间中每条消息的权效值的比较,可以得出新发送来的当前消息以及存储于消息主题中的所有消息的相对重要程度,进而选出相对重要性差的消息从消息主题中删除,以保证当前消息能够顺利的存储于消息主题中。本发明的方法在JMS规范的Pub/Sub消息模型中可有效的避免消息阻塞,保证了消息的实效性,并且避免了重要消息丢失的风险。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明作进一步详细说明。
如图2所示,本发明的JMS规范的Pub/Sub消息模型的消息生产消费方法包括:
步骤1、接收消息生产者所创建的当前消息,之后执行步骤2;
步骤2、获取所述当前消息的权效向量,并计算所述当前消息的权效值,之后执行步骤3;
步骤3、判断所述消息主题中的消息是否已满,当所述消息主题中的消息未满时执行步骤4,当所述消息主题中的消息已满时执行步骤4;
步骤4、将所述当前消息的权效向量加入到权效向量空间,并将所述当前消息放入所述消息主题,以使订阅此消息主题的消费者接收并消费;
步骤5、获取当前权效向量空间中所有消息的权效值,并计算当前权效向量空间的权效阈值,之后执行步骤6;
步骤6、在所述权效向量空间中,将权效值低于所述权效阈值的消息进行标记,之后执行步骤7;
步骤7、比较所述当前消息的权效值与所述权效阈值的大小,若所述当前消息的权效值大于所述权效阈值,则执行步骤8,否则执行步骤9;
步骤8、从所述消息主题中删除一条已标记消息,并同时从权效向量空间中删除该条已标记消息的权效向量,之后执行步骤4;
步骤9、丢弃所述当前消息。
其中,所述权效向量空间为四维向量组成的向量空间,具体来说,该权效向量空间中的四维向量包括消息ID、重要度、时效度和置换标识。其中,消息ID用于对消息进行唯一的标识;重要度是根据消息优先级和消息发送源权重获得,在JMS规范的Pub/Sub消息模型中,消息优先级可由消息发送源进行确定,消息发送源权重可针对JMS规范的Pub/Sub消息模型所处系统中的具体情况而确定;时效度根据消息的发送时间获得,具体可由一个消息的发送时间的映射函数求出,详见后续说明;置换标识用于对可置换的消息作标识,关于可置换消息,详见后续说明。
作为一个具体实施例,重要度根据如下公式获得:
F1(x)=Ax×Wx (1)
其中,x为任意一条消息,Ax为消息x的优先级,Wx为消息x的发送源权重,F1(x)为消息x的重要度。
作为一个具体实施例,时效度根据如下公式获得:
其中,Tx为消息x的发送时间,F2(x)为消息x的时效度。
在步骤2中,根据所述当前消息的权效向量计算所述当前消息的权效值,是根据所述当前消息的重要度和时效度计算所述当前消息的权效值,具体地,所述当前消息的权效值依据如下公式计算:
w(x0)=αF1(x0)+βF2(x0) (3)
其中,x0表示当前消息,w(x0)为所述当前消息的权效值,α为重权参数,β为时权参数,F1(x0)为所述当前消息的重要度,F2(x0)为所述当前消息的时效度,重权参数和时权参数的取值范围为正数,可依据实际具体情况而设定大小,例如若实际中,组成消息的权效值中,若倾向于消息的重要度比消息的时效度的比重大,那么设定的重权参数可比时权参数大,反之,若倾向于消息的重要度比消息的时效度的比重小,那么设定的重权参数可比时权参数小,若倾向于消息的重要度与消息的时效度的比重相同,那么设定的重权参数和时权参数相等,本领域技术人员可在本发明的内容基础上,结合具体应用环境而对重权参数和时权参数进行具体设定,例如可设定重权参数和时权参数均为0.5,或者设定重权参数为0.3、时权参数为0.7,或者设定重权参数为0.7、时权参数为0.3等。
步骤5中,依据如下公式获取当前权效向量空间中所有消息的权效值:
w(x)=αF1(x)+βF2(x) (4)
其中,x表示任意一条消息,w(x)为消息x的权效值,α为重权参数,β为时权参数,F1(x)为消息x的重要度,F2(x)为消息x的时效度。
步骤5中,依据如下公式计算所述当前权效向量空间的权效阈值:
其中,n为当前权效向量空间中的权效向量总数,w(x)为第i个消息的权效值,εi为第i个消息的加权参数,且有:
其中,所述加权参数依据如下公式确定:
其中,W为当前消息主题中所有消息的权效值之和,即
wi为第i个消息的权效值,n为当前权效向量空间中的权效向量总数,即当前消息主题中的消息数量。
在步骤8中,根据权效最佳置换算法EWOPT,从所述消息主题中删除一条已标记消息,并同时从权效向量空间中删除该条已标记消息的权效向量。
其中,所述权效最佳置换算法为:在已标记的消息中,随机删除一条消息,并同时删除该条所删除消息的权效向量,所述消息主题中排列在所删除消息之后的消息依次前移,以使所述当前消息进入所述消息主题。
以下结合一个实际过程的实施例,并结合图3,对本发明的JMS规范的Pub/Sub消息模型的消息生产消费方法进行具体说明。图3所示的实施例包括以下各个步骤。
步骤a1、消息生产者创建并发出当前消息,之后进入步骤a2。
步骤a2、接收当前消息,之后进入步骤a3。
步骤a3、获取当前消息的权效向量,并计算当前消息的权效值,之后进入步骤a4。其中,当前消息的权效值依据前述的公式(3)获得。
步骤a4、判断所述消息主题中的消息是否已满,如果是则进入步骤a5,否则进入步骤a10。
步骤a5、获取当前权效向量空间中所有消息的权效值,并计算当前权效向量空间的权效阈值,之后进入步骤a6。其中,当前权效向量空间中所有消息的权效值依据前述的公式(4)获得,当前权效向量空间的权效阈值依据前述的公式(5)进行计算。
步骤a6、将权效向量空间中的权效值低于所述权效阈值的消息进行标记,之后进入步骤a7。
步骤a7、比较当前消息的权效值与所述权效阈值的大小,以确认是否可将当前消息与消息主题中的已有消息进行替换;若当前消息的权效值大于权效阈值,则表明当前消息权效较大,可以替换权效向量空间中所标明的较低权效(权效值低于权效阈值)的消息,此时进入步骤a8;若当前消息的权效值不大于权效阈值,则表明当前消息权效较小,不利于替换消息主题中的已有消息,此时进入步骤a9。
步骤a8、在权效向量空间确定出消息主题中将被替换的消息,并将该被替换消息从消息主题中移除,同时在权效向量空间将该被替换消息的权效向量,之后进入步骤a10。本步骤a8中采用前述的权效最佳置换算法进行。
步骤a9、将当前消息丢弃。
步骤a10、将当前消息的权效向量加入到权效向量空间,之后进入步骤a11。
步骤a11、将当前消息放入消息主题,以使订阅此消息主题的消费者接收并消费。
作为一个具体实施例,步骤a9中还可以由步骤a9’替代:
步骤a9’、等待消息主题中的任意一条消息被所有消费者接受并消费,进而消息主题可存入新的消息后,进入步骤a10。
本发明提供的上述JMS规范的Pub/Sub消息模型的消息生产消费方法,根据发送源权重、消息重要度以及发送时间等参数,对Pub/Sub消息模型中的消息设立了权效向量,权效向量综合了所述的发送源权重、消息重要度以及发送时间等参数,进而反映了权效向量所对应消息的重要程度。通过本发明的方法,能够将消息主题中所有的消息的权效向量存储于权效向量空间中,进而能够在权效向量空间中反应出消息主题中所有消息的综合的重要程度,并由权效向量空间的向量值所反映。当消息主题中的消息存储满时,通过本发明的方法,通过设定的权效阈值和权效向量空间中每条消息的权效值的比较,可以得出新发送来的当前消息以及存储于消息主题中的所有消息的相对重要程度,进而选出相对重要性差的消息从消息主题中删除,以保证当前消息能够顺利的存储于消息主题中。本发明的方法在JMS规范的Pub/Sub消息模型中可有效的避免消息阻塞,保证了消息的实效性,并且避免了重要消息丢失的风险。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。