射频识别RFID标签的分发方法和装置 【技术领域】
本发明涉及数字通讯技术领域,尤其涉及一种射频识别(RadioFrequency Identification,RFID)标签的分发方法和装置。
背景技术
在全球产品电子代码管理中心(Electronic Product Code Global,EPC global)系统框架中,为了得到方便使用的RFID标签,可以在阅读器与产品电子代码(Electronic Product Code,EPC)资讯服务系统之间增加对RFID标签进行编解码、以及对RFID标签进行实时过滤与分组的RFID中间件。
其中,RFID中间件可同时连接多个不同种类、不同型号的阅读器,这些阅读器都会向RFID中间件发送携带RFID标签的消息。并且,在RFID中间件内部,还可能存在多个模块对所连接的阅读器执行并发操作。为了保证RFID中间件和阅读器之间的通信的准确性,可以预先为每个阅读器及RFID中间件分别设置一个唯一标识,在RFID中间件与阅读器之间发送消息时,可以指定接收方的标识,从而保证消息准确到达目的地。
由于RFID中间件主要是完成标签数据转换框架(Tag DataTranslation,简称为TDT)标准中的标签编解码功能以及应用级别事件(Application Level Event,简称为ALE)标准中标签的实时过滤与分组功能,因此,对RFID中间件的分发性能要求很高。
以下对上文中涉及的概念术语进行解释:
RFID:一种非接触式的自动识别技术,通过射频信号自动识别目标对象并获取相关数据,识别工作不受人工干预,可应用于各种恶劣环境。
EPC global:EPC的全球管理机构,它隶属于国际物品编码协会,是全球用户参与的、中立的、非营利性的标准化组织。它通过国际物品编码协会在全球103个国家和地区的编码组织来推动和实施EPC工作,主要包括:推广EPC标准;管理EPC global网络;实施EPC系统的推广工作。
EPC:其载体为RFID电子标签,借助互联网传递信息。EPC的目的是为每一件单品建立全球的、开放的标识标准,实现全球范围内对单件产品的跟踪与追溯,从而有效提高供应链管理水平、降低物流成本。
ALE:其事件处于应用领域而非边缘领域,用于提供业务层面的标准接口来对经过边缘过滤的数据再进行处理。
TDT:提供了一种对不同类型EPC标签数据进行不同表现级别间的自由转换机制。
RFID中间件:EPC global中的ALE的系统实现,实现ALE规范中约束的所有内容,包括过滤、分组等功能,此外还实现了TDT协议中约定的标签解码,稳定性校验等功能。
目前,RFID中间件对RFID标签的分发方法为:当接收到来自阅读器的消息时,通过该消息中包含的内容确定该消息的处理操作,然后执行该处理操作,获取处理后的信息,然后需要该信息的模块之一调用该信息进行处理,该模块处理完之后,再由另一个需要该信息的模块调用该信息进行处理,依次进行,直到所有需要该信息的模块都处理完了,再返回等待接收阅读器的下一条消息。
当阅读器向RFID中间件发送的数据量增大,或多个阅读器向RFID中间件发送消息时,这种单线程的处理方式就可能出现阻塞,许多消息可能无法得到及时处理。并且,由于该方法在标签分发时也采用单线程的分发方式,因此当某个模块处理某条信息的时间很长,或当信息较多的时候,也会出现阻塞,导致RFID标签不能及时地分发,降低了RFID标签分发的效率。
【发明内容】
有鉴于此,本发明提供了一种RFID标签的分发方法,用于解决现有技术中,在大数据量、高并发性的环境中,RFID标签不能及时分发,产生阻塞,分发效率较低的问题。
根据本发明的一个方面,提供了一种RFID标签的分发方法。
根据本发明的RFID标签的分发方法包括:获取来自阅读器的携带有RFID标签信息的消息,根据消息的内容,确定消息对应的处理操作;将处理操作在线程池进行缓存,当处理操作分配到处理线程时,对消息执行处理操作,并将处理得到的信息在信息队列中进行缓存,其中,处理操作包括编解码处理,信息包括编解码后的RFID标签信息;通过执行一个或多个分发线程,将处理得到的信息分发给一个或多个模块,其中,每个分发线程都以对应的模块编号为标识。
根据本发明的另一方面,提供了一种RFID标签地分发装置。
根据本发明的RFID标签的分发装置包括:确定模块,用于获取来自阅读器的携带有RFID标签信息的消息,根据消息的内容,确定消息对应的处理操作;第一处理模块,用于将处理操作在线程池进行缓存,为该处理操作分配处理线程,并对消息执行该处理操作,其中,处理操作包括编解码处理;第二处理模块,用于将第一处理模块处理得到的信息在信息队列中进行缓存,其中,信息包括编解码后的RFID标签信息;分发模块,用于通过执行一个或多个分发线程,将第二处理模块缓存的处理得到的信息分发到一个或多个模块,其中,每个分发线程都以对应的模块编号为标识。
本发明通过线程池的合理调度来并行地对消息进行处理,解决了现有技术中存在的分发阻塞、分发效率低的问题,相比于现有技术,能够快速、有效、实时地对RFID标签信息进行处理和分发,减少分发所需要的时间,提高分发的效率。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
【附图说明】
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
图1A为根据本发明实施例的RFID标签的分发装置的结构示意图;
图1B为根据本发明优选实施例的RFID标签的分发装置的结构图;
图2为根据本发明实施例的用于实现RFID标签的分发装置的一种结构的示意图;
图3为根据本发明实施例的RFID标签的分发方法的流程图;
图4为根据本发明实施例的RFID标签的分发方法的具体实现过程的流程图。
【具体实施方式】
本发明实施例中,在获取来自阅读器的消息时,首先根据该消息的内容,确定该消息对应的处理操作,然后将该处理操作在线程池中缓存,等待分配处理线程,当分配到处理线程时,该消息执行对应的处理操作,并将处理得到的信息在信息队列中进行缓存,等待分发线程的处理,通过执行一个或多个分发线程,将处理得到的信息分发给一个或多个模块。
以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
图1A为根据本发明实施例的RFID标签的分发装置的结构图,图1B为根据本发明优选实施例的RFID标签的分发装置的结构图。
如图1A所示,根据本发明实施例的RFID标签的分发装置包括:确定模块10、第一处理模块12、第二处理模块14和分发模块16。以下进一步结合附图来描述上述各个模块。
(一)确定模块10,用于获取来自阅读器的携带有RFID标签信息的消息,并根据消息的内容,确定消息对应的处理操作。
具体地,如图1B所示,确定模块10可以包括:获取子模块100和确定子模块102。其中,
获取子模块100,用于获取来自阅读器的消息的内容。
确定子模块102,与获取子模块100连接,用于根据预先建立的内容与处理操作的对应关系,确定与获取子模块100获取的消息的内容对应的处理操作。
(二)第一处理模块12,与确定模块10连接,用于将确定模块10确定的处理操作在线程池进行缓存,为处理操作分配处理线程,并对消息执行该处理操作(包括编解码处理)。
具体地,如图1B所示,第一处理模块12可以包括:判断子模块120、分配子模块122和存储子模块124。其中,
判断子模块120,用于在将确定模块10确定的处理操作在线程队列中进行缓存之后,判断当前是否有空闲的处理线程。
分配子模块122,与判断子模块120连接,用于在判断子模块120确定当前有空闲的处理线程时,为处理操作分配处理线程。
存储子模块124,与判断子模块120连接,用于在判断子模块120确定当前没有空闲的处理线程时,将处理操作放入线程池中的处理队列,等待线程分配。
进一步地,存储子模块124又可以包括判断单元1240和扩充单元1242。其中,
判断单元1240,用于在将处理操作放入线程池中的处理队列之前,判断处理队列是否已满。
扩充单元1242,与判断单元1240连接,用于在判断单元1240确定处理队列已满时,根据预设的参数扩充处理队列的容量,增加处理线程的数量,以及处理线程的空闲状态下的保留时间。
(三)第二处理模块14,与第一处理模块12连接,用于将第一处理模块12处理得到的信息(包括编解码后的RFID标签信息)在信息队列中进行缓存。
进一步地,如图1B所示,根据本发明实施例的RFID标签的分发装置还可以包括:回收模块18,与第二处理模块14连接,用于在第二处理模块14将处理得到的信息在信息队列中进行缓存后,回收处理处理操作的处理线程。
(四)分发模块16,与第二处理模块14连接,用于通过执行一个或多个分发线程,将第二处理模块14缓存的处理得到的信息分发到一个或多个模块,其中,每个分发线程都以对应的模块编号为标识。
具体地,如图1B所示,分发模块16可以包括以下之一或其组合:扩展子模块160和回收子模块162。其中,
扩展子模块160,用于当信息队列中包括的信息超过预定阈值,或其中一个信息的分发处理时间超过预定时间阈值时,执行增加分发线程数量的操作。
回收子模块162,用于当分发线程空闲的时间超过预定时间阈值时,对空闲的分发线程执行回收或合并操作。
在具体实施过程中,该装置可由图2中的装置20实现。该装置包括:网元通讯模块200、通用适配引擎202、任务处理线程池204、非阻塞数据队列模块206以及信息处理模块208。其中,
网元通讯模块200,相当于图1B中的确定模块10的获取子模块100,用于同阅读器22进行无差异通讯模式的交互模块,获取阅读器22发送的消息。
通用适配引擎202,与网元通讯模块200连接,相当于图1B中的确定模块10的确定子模块102,用于根据网元通讯模块202获取的消息的内容,获取发送该消息的阅读器的类型和版本,以及执行处理操作的命令码,然后进行适配,获取该消息对应的处理操作。
任务处理线程池204,与通用适配引擎202连接,相当于图1A及图1B中的第一处理模块12,用于将通用适配引擎202获取的处理操作放入线程池,为处理操作分配处理线程,并对消息执行该处理操作,并且,任务处理线程池204可以根据当前的处理量动态调整处理线程数量和等待处理队列的大小。
非阻塞数据队列模块206,与任务处理线程池204连接,相当于图1A及图1B中的第二处理模块和分发模块,用于将任务处理线程池204执行处理操作后得到的信息缓存在信息队列中,并通过执行一个或多个分发线程,将得到的信息分发给处理该信息的模块。
信息处理模块208,与非阻塞数据队列模块206连接,用于对任务处理线程池204得到的信息进行处理,具体地可能包括:清点模块,用于根据规则对信息进行分组、过滤;写模块,用于对标签的各数据区进行写操作。除这两个模块外,信息处理模块还可以包括其它模块。
下面接合上述的装置,对本发明实施例提供的RFID标签的分发方法进行详细说明,如图3所示,根据本发明实施例的RFID标签的分发方法的主要流程包括以下处理(步骤S300-步骤S304):
步骤S300:获取来自阅读器的携带有RFID标签信息的消息,根据该消息的内容,确定该消息对应的处理操作;
步骤S302:将步骤S300中确定的处理操作在线程池进行缓存,当该处理操作分配到处理线程时,对获取的消息执行该处理操作,并将处理得到的信息在信息队列中进行缓存;其中,信息队列是以比较并交换(Compare And Set,简称为CAS)算法实现的非阻塞队列,CAS算法可以实现一个线程的失败或挂起不影响其他线程的失败或挂起。并且,在信息队列中,保存的每个信息与其来自的阅读器的唯一标识对应;
步骤S304:通过执行一个或多个分发线程,将处理得到的信息分发给一个或多个模块。
以下进一步描述上述处理的各个细节。
(一)步骤S300
在进行步骤S300的处理之前,阅读器发出射频信号,读取标签的信息,然后向RFID中间件发送封装有标签信息的消息,同时,该消息的内容包括但不限于以下信息:阅读器的类型、阅读器的版本号、以及处理该消息的处理操作的命令码。
在具体实施过程中,步骤S300中,确定消息的处理操作这一步骤可以包括如下处理:
(1)获取所述消息的内容。在获取阅读器发送的消息时,首先从该消息中解析出该消息的内容,从而得到发送该消息的阅读器的类型、版本号,和/或命令码。其中,命令码是指示执行处理操作的代码。
(2)根据预先建立的内容与处理操作的对应关系,确定与该消息的内容对应的处理操作。其中,内容与处理操作的对应关系是按照设定的模式建立的,包括按照阅读器的类型、阅读器的版本,和/或,命令码确定相应的处理操作。
(二)步骤S302
在该步骤中,线程池是按照预先设定的策略实现的,其提供了处理操作的缓存机制,包括活跃线程(即处理放入线程池中的处理操作的线程,以下称作处理线程)和存放操作等待调度的队列(即存放等待调度的处理操作的队列,以下称作处理队列);并且,线程池可以根据配置,改变其中活跃的处理线程的数量及存放等待调度的操作的处理队列的大小。
这样,在步骤S300中成功获取(确定)消息的处理操作后,在步骤S302中首先将该处理操作放入线程池,主处理线程等待接收下一个消息。
线程池在接收到处理操作时,首先判断当前是否有空闲的处理线程,并根据判断的结果采取相应的措施,基于此,步骤S302具体可以包括如下处理:
步骤1:判断当前是否有空闲的处理线程,如有,进入步骤6,否则,继续步骤2。
步骤2:判断当前处理队列是否已满,如果是,则继续步骤3,否则,进入步骤5。
步骤3:根据预设的参数,扩充处理队列的容量。当处理队列已满,则需要根据预设的参数,对队列的上限进行提升,以扩充处理队列的容量,否则,无法将处理操作放入处理队列中。
步骤4:增加处理线程的数量,以及处理线程在空闲状态下的保留时间。如果当前的处理队列已满,则说明当前待处理的处理操作的数量已经超过预定的阈值,必须增加当前的处理线程的数量,以及时处理待处理的任务,减少任务的等待处理的时间。
步骤5:将该处理操作放入处理队列中,等待调度。
处理线程按照先进先出(First In First Out,简称为FIFO)的原则,逐个调度存放在处理队列中的任务,当该处理操作之前的任务都被调度执行后,该处理操作将被分配到处理线程。
步骤6:处理线程根据该处理操作的类型,对消息执行相应的处理操作,并将处理得到的信息放入信息队列中;其中,对消息进执行的处理操作包括:编解码处理;相应地,得到的信息包括编解码后的RFID标签信息。
在具体实施过程中,为了保障与阅读器之间的可靠传输,处理线程会先根据处理操作的类型进行前置操作,为得到的信息增加通用的消息头,并在处理后进行后置操作,增加保证可靠性传输的信息。
当处理线程完成相应的处理操作为,回收该处理线程,以处理下一个处理操作。
(三)步骤S304
当信息队列中存放在步骤S302得到的信息之前的信息都处理完后,由一个或多个以RFID中间件内部模块编号为标识的分发线程,对该信息进行分发,从而可以保证每个模块所需要的信息不会被其它模块所阻塞。
在具体实施过程中,当信息队列中包括的信息数量超过预定阈值,或对其中一个信息的分发处理时间超过预定时间阈值时,可以增加分发线程的数量,以减少信息处理的阻塞;而当已分配的分发线程中存在空闲线程,且空闲的时间超过预定时间阈值时,可以对分发线程进行合并或回收。
图4为本发明实施例提供的RFID标签的分发方法的一个优选实施例的流程图。结合图2,如图4所示,主要包括以下步骤:
步骤S400:网元通讯模块获取阅读器发送的消息,进行检验后,将该消息发送给通用适配引擎;其中,该消息中包括阅读器读取的RFID标签信息。
步骤S402:通用适配引擎从该消息中读取该消息的内容,并根据预先建立的内容与处理操作的对应关系,确定与该消息的内容对应的处理操作。
在具体操作过程中,可能存在获取不到与消息内容对应的操作处理的情况,在这种情况下,流程直接结束,不对该消息做处理,等待接收下一个消息。
步骤S404:通用适配引擎将确定的处理操作放入任务处理线程池的线程池中。将处理操作放入线程池后,主处理线程开始等待接收下一个消息,可以保证接收线程的非阻塞。
步骤S406:任务处理线程池判断当前是否有空闲线程,如果是,则进入步骤S416,否则,继续步骤S408。
步骤S408:判断当前的处理队列是否已满,如果是,继续步骤S410,否则,进入步骤S414。
步骤S410:根据设定的参数,扩充处理队列的容量。其中,处理队列中放置的是等待处理的任务,即处理操作。
步骤S412:增加处理线程的数量,以及处理空闲状态下的处理线程的存活时间。其中,处理线程的存活时间是指处理线程处于空闲状态多长时间后才回收,即处理线程在空闲状态下的保留时间。
由于处理队列已满,说明当前待处理的任务数量较多,因此,需要增加处理线程的数量,以减少等待处理的任务的数量。
步骤S414:将处理操作放入处理队列,等待处理。当处理队列中排在该处理操作之前的任务都已经执行时,该处理操作将分配到处理线程。
步骤S416:处理线程根据处理操作的类型对消息执行该处理操作。具体地,处理线程先根据其操作类型(前向、反向消息)进行前置操作,并在处理后进行后置操作,如对前向消息,在前置操作中会增加通用消息头。
步骤S418:将处理得到的信息缓存在信息队列,回收执行该次处理的处理线程。
步骤S420:通过执行一个或多个分发线程,将处理得到的信息分发给一个或多个模块。其中,每个分发线程都以对应的模块编号为标识。
在具体实施过程中,可以根据具体情况,为每个模块处理分配一个分发线程,也可以多个模块处理共用一个分发线程,或多个分发线程执行一个模块处理。
并且,如上所述,当信息队列中包括的信息超过预定阈值,或对其中一个信息的分发处理时间超过预定时间阈值时,可以增加分发线程的数量,以减少信息处理的阻塞,而当已分配的分发线程中存在空闲线程,且空闲的时间超过预定时间阈值时,可以对分发线程进行合并或回收。
本发明实施例中,在获取来自阅读器的消息时,首先根据该消息的内容,确定该消息对应的处理操作,然后将该处理操作在线程池中缓存,等待分配处理线程,当分配到处理线程时,对该消息执行处理操,并将处理得到的信息在信息队列中进行缓存,等待分发线程的处理,通过执行一个或多个分发线程,将处理得到的信息分发给一个或多个模块。通过本发明,能快速、有效、实时地对标签信息进行处理、分发,从而减少RFID标签分发的阻塞,减少分发所需要的时间,提高分发的效率,达到非阻塞、高性能地处理、分发标签的目的,进而提高RFID中间件的整体性能。并且,本发明实施例可以根据当前的处理量,动态调整处理线程和分发线程的数量,因此,可以最大限度的适应大数据量,高并发性的环境,保证数据无阻塞转发。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。