一种消息队列容器创建方法、装置及消息队列容器
技术领域
本发明涉及计算机技术领域,特别涉及一种消息队列容器创建方法、装置及消息队列容器。
背景技术
随着IT技术的发展,消息队列技术被大量使用。随着系统的并发程度提高,系统内部逻辑之间的耦合较高,会使程序处理请求的速度变慢。使用消息队列对系统内部进行解耦,异步处理事件,可以提高系统的可扩展性和灵活性。
目前,可以单独部署或者在多个机器上分布式部署单独的消息队列组件,比如kafka、ActiveMq等。
但是,单独的消息队列组件的资源占用率较高。
发明内容
本发明提供了一种消息队列容器创建方法、装置及消息队列容器,能够降低资源占用率。
为了达到上述目的,本发明是通过如下技术方案实现的:
第一方面,本发明提供了一种消息队列容器创建方法,包括:
修改目标对象的应用程序;
确定所述目标对象的配置文件,所述配置文件中包括有至少一个参数;
通过执行修改后的所述应用程序并加载所述配置文件,创建所述目标对象对应的消息队列容器,其中,所述消息队列容器满足所述至少一个参数。
进一步地,所述修改目标对象的应用程序,包括:将预设的生产者接口对应的代码程序、消费者接口对应的代码程序、容器创建代码程序增加至目标对象的应用程序中;
所述消息队列容器中包括有所述生产者接口和所述消费者接口。
进一步地,所述至少一个参数包括:主题名称数量上限、队列消息数量上限、队列溢出处理值中的任意一种或多种;
所述消息队列容器满足所述至少一个参数包括:所述消息队列容器中包括的主题名称的个数不大于所述主题名称数量上限,且任一所述主题名称对应的消息链表的容量不大于所述队列消息数量上限。
第二方面,本发明提供了一种消息队列容器创建装置,包括:
修改单元,用于修改目标对象的应用程序;
确定单元,用于确定所述目标对象的配置文件,所述配置文件中包括有至少一个参数;
创建单元,用于通过执行修改后的所述应用程序并加载所述配置文件,创建所述目标对象对应的消息队列容器,其中,所述消息队列容器满足每一个所述参数。
进一步地,所述修改单元,具体用于将预设的生产者接口对应的代码程序、消费者接口对应的代码程序、容器创建代码程序增加至目标对象的应用程序中;
所述消息队列容器中包括有所述生产者接口和所述消费者接口。
第三方面,本发明提供了一种消息队列容器,所述消息队列容器利用上述任一所述的消息队列容器创建方法进行创建。
进一步地,所述消息队列容器中包括有生产者接口和消费者接口。
进一步地,所述至少一个参数包括:主题名称数量上限、队列消息数量上限、队列溢出处理值;
所述消息队列容器中还包括第一处理单元、第二处理单元、第三处理单元、第四处理单元;
所述生产者接口,用于接收外部输入的新消息和所述新消息对应的第一主题名称;
所述第一处理单元,用于判断所述消息队列容器中是否存在所述第一主题名称,若是,触发所述第二处理单元,否则,触发所述第四处理单元;
所述第二处理单元,用于判断所述第一主题名称对应的第一消息链表中的消息数量是否小于所述队列消息数量上限,若是,将所述新消息增加至所述第一消息链表的队尾,否则,触发所述第三处理单元;
所述第三处理单元,用于在确定出所述队列溢出处理值为remove Oldest时,将所述第一消息链表中的队首消息移除,并将所述新消息增加至所述第一消息链表的队尾;在确定出所述队列溢出处理值为remove Latest时,放弃所述新消息;在确定出所述队列溢出处理值为wait时,以及进一步监测到所述第一消息链表中的队首消息被移除时,将所述新消息增加至所述第一消息链表的队尾;
所述第四处理单元,用于判断所述消息队列容器中存在的主题名称数量是否小于所述主题名称数量上限,若是,创建所述第一主题名称及其对应的消息链表,并将所述新消息增加至该消息链表的队尾,否则,向所述生产者接口返回预设的错误代码。
进一步地,所述第四处理单元,具体用于基于所述队列消息数量上限,创建所述第一主题名称对应的消息链表,以使该消息链表的容量与所述队列消息数量上限相一致。
进一步地,所述消息队列容器中还包括:第五处理单元;
所述消息队列容器中包括有至少一个主题名称及每一个主题名称对应的消息链表,且所述至少一个主题名称中包括第二主题名称;
所述消费者接口,用于接收外部输入的所述第二主题名称;
所述第五处理单元,用于将所述第二主题名称对应的消息链表的队首消息移出,并将移出的所述队首消息推送至所述消费者接口。
本发明提供了一种消息队列容器创建方法、装置及消息队列容器,该方法包括:修改目标对象的应用程序;确定目标对象的配置文件,且配置文件中包括有至少一个参数;通过执行修改后的应用程序并加载配置文件,创建目标对象对应的消息队列容器,其中,创建出的消息队列容器满足所述至少一个参数。对于任一目标对象,基于其应用程序和配置文件,即可创建其对应的消息队列容器,以进行其相关消息处理。这一轻量级消息队列容器可以替代现有的消息队列组件,故无需部署消息队列组件。因此,本发明能够降低资源占用率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一实施例提供的一种消息队列容器创建方法的流程图;
图2是本发明一实施例提供的另一种消息队列容器创建方法的流程图;
图3是本发明一实施例提供的一种消息队列容器创建装置的示意图;
图4是本发明一实施例提供的一种消息队列容器的示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,本发明实施例提供了一种消息队列容器创建方法,可以包括以下步骤:
步骤101:修改目标对象的应用程序。
步骤102:确定所述目标对象的配置文件,所述配置文件中包括有至少一个参数。
步骤103:通过执行修改后的所述应用程序并加载所述配置文件,创建所述目标对象对应的消息队列容器,其中,所述消息队列容器满足所述至少一个参数。
本发明实施例提供了一种消息队列容器创建方法,修改目标对象的应用程序;确定目标对象的配置文件,且配置文件中包括有至少一个参数;通过执行修改后的应用程序并加载配置文件,创建目标对象对应的消息队列容器,其中,创建出的消息队列容器满足所述至少一个参数。对于任一目标对象,基于其应用程序和配置文件,即可创建其对应的消息队列容器,以进行其相关消息处理。这一轻量级消息队列容器可以替代现有的消息队列组件,故无需部署消息队列组件。因此,本发明实施例能够降低资源占用率。
详细地,目标对象可以为任一单元部件,比如可以为服务器中的任一单元部件。基于任一单元部件的应用程序以创建消息队列容器,则创建出的消息队列容器仅用于处理该单元部件相关消息。如此,这一消息队列容器是轻量级的、资源占用程度远低于现有的消息队列组件。
在本发明的一个实施例中,所述修改目标对象的应用程序,包括:将预设的生产者接口对应的代码程序、消费者接口对应的代码程序、容器创建代码程序增加至目标对象的应用程序中;
所述消息队列容器中包括有所述生产者接口和所述消费者接口。
详细地,生产者接口对应的代码程序和消费者接口对应的代码程序可以为行业标准代码程序,容器创建代码程序可以为工作人员根据自身需求编写的代码程序。
通过将这些代码程序增加至目标对象的应用程序的相应位置处,当通过执行应用程序以启动该目标对象时,基于添加的代码程序可以创建出一个包括有生产者接口和消费者接口的消息队列容器。这一消息队列容器是仅对应于目标对象的,用于处理目标对象相关消息。
优选地,消息队列容器的创建个数通常为一个。
在本发明的一个实施例中,所述至少一个参数包括:主题名称数量上限、队列消息数量上限、队列溢出处理值中的任意一种或多种;
所述消息队列容器满足所述至少一个参数包括:所述消息队列容器中包括的主题名称的个数不大于所述主题名称数量上限,且任一所述主题名称对应的消息链表的容量不大于所述队列消息数量上限。
举例来说,配置文件可以为mq.properties,该配置文件中包括三个参数,分别为主题名称数量上限、队列消息数量上限、队列溢出处理值。
在本发明一个实施例中,消息队列容器在创建完成时,可以包括生产者接口和消费者接口,但不包括任一主题名称和任一消息链表。当生产者通过生产者接口发送新消息时,消息队列容器基于该新消息以生成对应的主题名称和消息链表,来管理该新消息。基于这一实现方式,创建的消息队列容器中可以包括有若干主题名称,及各主题名称对应的消息链表。
通常情况下,消息队列容器中包括的主题名称的个数应不大于配置文件中的参数:主题名称数量上限,包括的消息链表的个数应不大于配置文件中的参数:队列消息数量上限。
基于配置文件中的参数:队列溢出处理值,可以对生产者接口接收到的新消息进行处理。在本发明一个实施例中,队列溢出处理值可以为remove Oldest、remove Latest、wait中的任意一个。
在后台程序中,需要使用一些轻量级的内部消息队列,对队列任务进行管理。消息队列作为中间人,按顺序存储生产者生产的消息,并向消费者提供其需要的消息。如此,可以创建一个轻量级的系统内部使用的消息队列容器。比如,如图2所示,本发明一个实施例提供了另一种消息队列容器创建方法,具体包括以下步骤:
步骤201:将预设的生产者接口对应的代码程序、消费者接口对应的代码程序、容器创建代码程序增加至目标对象的应用程序中。
步骤202:确定目标对象的配置文件,配置文件中包括有3个参数。
详细地,这3个参数可以为主题名称数量上限、队列消息数量上限、队列溢出处理值。
步骤203:通过执行修改后的应用程序并加载配置文件,创建目标对象对应的消息队列容器,其中,消息队列容器满足上述3个参数。
详细地,创建的消息队列容器中包括有生产者接口和消费者接口。
详细地,配置文件中的3个参数可以对创建出的消息队列容器进行限定,比如,消息队列容器中包括的主题名称的个数不大于主题名称数量上限,且任一主题名称对应的消息链表的容量不大于队列消息数量上限,基于队列溢出处理值,消息队列容器可以对生产者接口接收到的新消息进行处理。
本发明实施例中,创建的轻量级消息队列容器,可以解耦程序中的同步逻辑,使消息可以按顺序被异步处理,既保证了程序逻辑的顺序性,又能解耦逻辑之间的相互依赖,从而可以提高程序的可扩展性、灵活性,优化用户体验,降低硬件资源、网络资源占用程度,以及降低开发者的学习成本。
如图3所示,本发明一个实施例提供了一种消息队列容器创建装置,包括:
修改单元301,用于修改目标对象的应用程序;
确定单元302,用于确定所述目标对象的配置文件,所述配置文件中包括有至少一个参数;
创建单元303,用于通过执行修改后的所述应用程序并加载所述配置文件,创建所述目标对象对应的消息队列容器,其中,所述消息队列容器满足每一个所述参数。
在本发明一个实施例中,所述修改单元301,具体用于将预设的生产者接口对应的代码程序、消费者接口对应的代码程序、容器创建代码程序增加至目标对象的应用程序中;
所述消息队列容器中包括有所述生产者接口和所述消费者接口。
在本发明的一个实施例中,所述至少一个参数包括:主题名称数量上限、队列消息数量上限、队列溢出处理值中的任意一种或多种;
所述消息队列容器满足所述至少一个参数包括:所述消息队列容器中包括的主题名称的个数不大于所述主题名称数量上限,且任一所述主题名称对应的消息链表的容量不大于所述队列消息数量上限。
上述装置内的各单元之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
基于上述内容,本发明实施例提供了一种消息队列容器,所述消息队列容器利用上述任一所述的消息队列容器创建方法进行创建。
在本发明一个实施例中,请参照图4,所述消息队列容器中包括有生产者接口401和消费者接口402。
详细地,生产者接口和消费者接口主要用于实现消息队列容器与外部的任一生产者和任一消费者之间的信息交互。比如,任一生产者可以将其生产的新消息经生产者接口存入消息队列容器中,任一消费者可以消费消息队列容器中存储的各个消息。
在本发明一个实施例中,接口方法可以为同步方法,以防止因并发问题导致消息丢失等。
在本发明一个实施例中,请参照图4,所述至少一个参数包括:主题名称数量上限、队列消息数量上限、队列溢出处理值;
所述消息队列容器中还包括第一处理单元403、第二处理单元404、第三处理单元405、第四处理单元406;
所述生产者接口401,用于接收外部输入的新消息和所述新消息对应的第一主题名称;
所述第一处理单元403,用于判断所述消息队列容器中是否存在所述第一主题名称,若是,触发所述第二处理单元404,否则,触发所述第四处理单元406;
所述第二处理单元404,用于判断所述第一主题名称对应的第一消息链表中的消息数量是否小于所述队列消息数量上限,若是,将所述新消息增加至所述第一消息链表的队尾,否则,触发所述第三处理单元405;
所述第三处理单元405,用于在确定出所述队列溢出处理值为remove Oldest时,将所述第一消息链表中的队首消息移除,并将所述新消息增加至所述第一消息链表的队尾;在确定出所述队列溢出处理值为remove Latest时,放弃所述新消息;在确定出所述队列溢出处理值为wait时,以及进一步监测到所述第一消息链表中的队首消息被移除时,将所述新消息增加至所述第一消息链表的队尾;
所述第四处理单元406,用于判断所述消息队列容器中存在的主题名称数量是否小于所述主题名称数量上限,若是,创建所述第一主题名称及其对应的消息链表,并将所述新消息增加至该消息链表的队尾,否则,向所述生产者接口返回预设的错误代码。
详细地,对于生产者经调用生产者接口发来的任一新消息,基于上述四个单元,可以根据不同情况以对该新消息进行相应处理,比如,存入、放弃、等待,具体地,以及明确存入位置等。
可以看出,消息队列容器的消息处理实现方式可以基于配置文件中的参数得以实现,工作人员通过更改配置文件,可以对消息处理实现方式进行相应调整或更改。因此,本发明实施例中,开发者只需管理配置文件,通过调用生产者接口和消费者接口,即可实现消息管理,故开发者能够快速学习并投入使用。
在本发明一个实施例中,请参照图4,所述第四处理单元406,具体用于基于所述队列消息数量上限,创建所述第一主题名称对应的消息链表,以使该消息链表的容量与所述队列消息数量上限相一致。
详细地,创建一个新的消息链表时,该消息链表的容量,即该消息链表可以存储的消息数量可以等于配置文件中的参数:队列消息数量上限。当然,也可以小于这一上限。
在本发明一个实施例中,请参照图4,所述消息队列容器中还包括:第五处理单元407;
所述消息队列容器中包括有至少一个主题名称及每一个主题名称对应的消息链表,且所述至少一个主题名称中包括第二主题名称;
所述消费者接口402,用于接收外部输入的所述第二主题名称;
所述第五处理单元407,用于将所述第二主题名称对应的消息链表的队首消息移出,并将移出的所述队首消息推送至所述消费者接口。
详细地,对于消费者经消费者接口发来的针对任一消息的消费请求,当消息队列容器中存储有该消息时,可以将该消息经消费者接口发送至消费者,同时将该消息从相应消息链表中删除。比如,消费者发来一个主题名称时,默认该主题名称对应消息链表的队首消息为消费者所需消息。
在本发明一个实施例中,消息队列容器的一种可能实现方式可以为,消息队列容器中包含一个图,图中包含有至少一个元素。其中,每个元素的键为主题名称,值是该主题名称对应的消息链表。
如此,本发明实施例可以提供一种基于图和链表实现轻量级程序内部消息处理的消息队列容器,这一消息列表容器可以解决需要使用轻量级程序内部消息队列时,普通链表过于简单无法管理,而使用单独部署的消息队列组件又太过浪费资源的问题。
综上所述,本发明的各个实施例至少具有如下有益效果:
1、本发明实施例中,修改目标对象的应用程序;确定目标对象的配置文件,且配置文件中包括有至少一个参数;通过执行修改后的应用程序并加载配置文件,创建目标对象对应的消息队列容器,其中,创建出的消息队列容器满足所述至少一个参数。对于任一目标对象,基于其应用程序和配置文件,即可创建其对应的消息队列容器,以进行其相关消息处理。这一轻量级消息队列容器可以替代现有的消息队列组件,故无需部署消息队列组件。因此,本发明实施例能够降低资源占用率。
2、本发明实施例中,创建的轻量级消息队列容器,可以解耦程序中的同步逻辑,使消息可以按顺序被异步处理,既保证了程序逻辑的顺序性,又能解耦逻辑之间的相互依赖,从而可以提高程序的可扩展性、灵活性,优化用户体验,降低硬件资源、网络资源占用程度,以及降低开发者的学习成本。
3、本发明实施例中,开发者只需管理配置文件,通过调用生产者接口和消费者接口,即可实现消息管理,故开发者能够快速学习并投入使用。
4、本发明实施例中,可以提供一种基于图和链表实现轻量级程序内部消息处理的消息队列容器,这一消息列表容器可以解决需要使用轻量级程序内部消息队列时,普通链表过于简单无法管理,而使用单独部署的消息队列组件又太过浪费资源的问题。
需要说明的是,在本文中,诸如第一和第二之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同因素。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储在计算机可读取的存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质中。
最后需要说明的是:以上所述仅为本发明的较佳实施例,仅用于说明本发明的技术方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均包含在本发明的保护范围内。