CN111835809B - 工单消息分配方法、装置、服务器及存储介质 - Google Patents

工单消息分配方法、装置、服务器及存储介质 Download PDF

Info

Publication number
CN111835809B
CN111835809B CN201910902122.2A CN201910902122A CN111835809B CN 111835809 B CN111835809 B CN 111835809B CN 201910902122 A CN201910902122 A CN 201910902122A CN 111835809 B CN111835809 B CN 111835809B
Authority
CN
China
Prior art keywords
work order
node
consumption
consuming
order message
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201910902122.2A
Other languages
English (en)
Other versions
CN111835809A (zh
Inventor
杨健
李伟伟
李凯
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Didi Infinity Technology and Development Co Ltd
Original Assignee
Beijing Didi Infinity Technology and Development Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Didi Infinity Technology and Development Co Ltd filed Critical Beijing Didi Infinity Technology and Development Co Ltd
Priority to CN201910902122.2A priority Critical patent/CN111835809B/zh
Publication of CN111835809A publication Critical patent/CN111835809A/zh
Application granted granted Critical
Publication of CN111835809B publication Critical patent/CN111835809B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1001Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
    • H04L67/1034Reaction to server failures by a load balancer
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1001Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Hardware Redundancy (AREA)

Abstract

本申请提供一种工单消息分配方法、装置、服务器及存储介质,涉及数据处理技术领域。该方法包括:向第一消费节点发送第一工单消息之后,若确定所述第一消费节点的消费服务不可用,则确定第二消费节点,其中,所述第一消费节点和所述第二消费节点订阅的会话相同;向所述第二消费节点发送第二工单消息。通过采用多消费节点进行消息消费的工作模式,向第一消费节点发送第一工单消息,在第一消费节点消费服务不可用时,确定出第二消费节点,并向第二消费节点发送第二工单消息,保证了工单任务执行的顺序性,避免了在第一消费节点发生故障时,导致整个***发生崩溃,停止工作,从而提高了工单消息的处理效率。

Description

工单消息分配方法、装置、服务器及存储介质
技术领域
本发明涉及数据处理技术领域,具体而言,涉及一种工单消息分配方法、装置、服务器及存储介质。
背景技术
工单***又称为工单管理***,它是一种网络软件***,根据不同组织,部门和外部客户的需求,来有针对性的管理,维护和追踪一系列的问题和请求。如何实现工单***的高可用性和顺序性,提高工单消息的处理效率变得尤为重要。
现有技术中,采用单消费者工单处理模式,即基于一个会话(topic),一个隔离单元(partition),一个消费者(consumer)实现工单处理,在进行工单消息处理时,同一时刻只有一个工单在执行,且执行过程中维护消费者的消费位移(offset)以记录消费者的消费情况,若不维护offset,当工单***崩溃后,将会丢失部门工单消息,从而增加工单***的不可用性。
但是,采用现有技术的话,当应用上述单消费者工单处理模式的工单***因外界因素发生***故障时,例如:频繁操作,或是***突发性崩溃,将会导致整个工单消息处理***发生崩溃,***可用性较差,工单消息处理效率较低。
发明内容
本发明的目的在于,针对上述现有技术中的不足,提供一种工单消息分配方法、装置、服务器及存储介质,以便于解决现有技术中存在的工单***可用性较差,工单消息处理效率较低的问题。
为实现上述目的,本申请实施例采用的技术方案如下:
第一方面,本申请实施例提供了一种工单消息分配方法,包括:
向第一消费节点发送第一工单消息之后,若确定所述第一消费节点的消费服务不可用,则确定第二消费节点,其中,所述第一消费节点和所述第二消费节点订阅的会话相同;
向所述第二消费节点发送第二工单消息。
可选地,所述向所述第二消费节点发送第二工单消息之后,还包括:
接收所述第二消费节点发送的锁竞争请求;
在获取所述第一消费节点释放的锁之后,根据所述锁竞争请求将所述锁分配给所述第二消费节点。
可选地,所述方法还包括:
若收到消费节点添加指令,则在添加后的消费节点中选择均衡消费节点并向所述均衡消费节点发送新的工单消息,其中,所述第一消费节点和所述均衡消费节点订阅的会话相同。
可选地,所述若确定所述第一消费节点的消费服务不可用,则确定第二消费节点,包括:
若确定所述第一消费节点的消费服务不可用,等待预设时长后确定所述第一消费节点的消费服务是否恢复可用;
若所述第一消费节点的消费服务仍不可用,则确定第二消费节点。
第二方面,本申请实施例还提供了一种工单消息分配方法,所述方法应用于工单消息分配***,所述***包括:第一消费节点和第二消费节点;所述方法包括:
第二消费节点接收分布式服务器在所述第一消费节点的消费服务不可用之后发送的工单消息;
所述第二消费节点根据所述工单消息进入等待状态。
可选地,所述第二消费节点根据所述工单消息进入等待状态,包括:
向所述分布式服务器发送锁竞争请求。
可选地,所述第二消费节点根据所述工单消息进入等待状态之后,还包括:
接收所述分布式服务器在所述第一消费节点释放锁之后分配的锁;
基于所述锁执行所述工单消息对应的工单。
可选地,所述基于所述锁执行所述工单消息对应的工单,包括:
基于所述锁、以及预配置的幂等性策略,执行所述工单消息对应的工单。
第三方面,本申请实施例还提供了一种工单消息分配装置,包括:确定模块、第一发送模块;
所述确定模块,用于向第一消费节点发送第一工单消息之后,若确定所述第一消费节点的消费服务不可用,则确定第二消费节点,其中,所述第一消费节点和所述第二消费节点订阅的会话相同;
所述第一发送模块,用于向所述第二消费节点发送第二工单消息。
可选地,还包括:接收模块、分配模块;
所述接收模块,用于接收所述第二消费节点发送的锁竞争请求;
所述分配模块,用于在获取所述第一消费节点释放的锁之后,根据所述锁竞争请求将所述锁分配给所述第二消费节点。
可选地,所述装置还包括:第二发送模块;
所述第二发送模块,用于若收到消费节点添加指令,则在添加后的消费节点中选择均衡消费节点并向所述均衡消费节点发送新的工单消息,其中,所述第一消费节点和所述均衡消费节点订阅的会话相同。
可选地,所述确定模块,具体用于若确定所述第一消费节点的消费服务不可用,等待预设时长后确定所述第一消费节点的消费服务是否恢复可用;若所述第一消费节点的消费服务仍不可用,则确定第二消费节点。
第四方面,本申请实施例还提供了一种工单消息分配装置,包括:接收模块、待定模块;
所述接收模块,用于第二消费节点接收分布式服务器在第一消费节点的消费服务不可用之后发送的工单消息;
所述待定模块,用于所述第二消费节点根据所述工单消息进入等待状态。
可选地,还包括:发送模块;
所述发送模块,用于向所述分布式服务器发送锁竞争请求。
可选地,还包括执行模块;
所述接收模块,还用于接收所述分布式服务器在所述第一消费节点释放锁之后分配的锁;
所述执行模块,用于基于所述锁执行所述工单消息对应的工单。
可选地,所述执行模块,具体用于基于所述锁、以及预配置的幂等性策略,执行所述工单消息对应的工单。
第五方面,本申请实施例还提供了一种服务器,包括:处理器、存储介质和总线,所述存储介质存储有所述处理器可执行的程序指令,当服务器运行时,所述处理器与所述存储介质之间通过总线通信,所述处理器执行所述程序指令,以执行时执行如上述第一方面和第二方面所述的工单消息分配方法的步骤。
第六方面,本申请实施例还提供了一种存储介质,所述存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行如上述第一方面和第二方面所述的工单消息分配方法的步骤。
本申请的有益效果是:本申请实施例提供的工单消息分配方法、装置、服务器及存储介质,通过采用多消费节点进行消息消费的工作模式,向第一消费节点发送第一工单消息,在第一消费节点消费服务不可用时,确定出第二消费节点,并向第二消费节点发送第二工单消息,保证了工单任务执行的顺序性,避免了在第一消费节点发生故障时,导致整个***发生崩溃,停止工作,从而提高了工单消息的处理效率。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的一种工单消息分配***框图;
图2为本申请实施例提供的一种工单消息分配方法流程示意图;
图3为本申请实施例提供的另一种工单消息分配方法流程示意图;
图4为本申请实施例提供的又一种工单消息分配方法流程示意图;
图5为本申请实施例提供的一种工单消息分配方法流程示意图;
图6为本申请实施例提供的另一种工单消息分配方法流程示意图;
图7为本申请实施例提供的一种工单消息分配装置结构示意图;
图8为本申请实施例提供的另一种工单消息分配装置结构示意图;
图9为本申请实施例提供的又一种工单消息分配装置结构示意图;
图10为本申请实施例提供的一种工单消息分配装置结构示意图;
图11为本申请实施例提供的另一种工单消息分配装置结构示意图;
图12为本申请实施例提供的一种服务器结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。
图1为本申请实施例提供的一种工单消息分配***框图;如图1所示,该工单消息分配***可以为分布式消息分发***,该***可以包括:订阅消息队列、多个工单***、etcd(分布式键值存储设备)集群及GW(GateWay,网关)集群。其中,订阅消息队列可以是kafka订阅消息队列,kafka订阅消息队列为提供消息存储的组件,可以相当于云服务器,多个工单***可以为消息消费节点,也即对应于消息消费节点服务器,该多个消息消费节点属于同一消费群组,其订阅的消息会话类型相同。通过kafka消息队列可以向多个工单***分配消息,不同的工单***可以对应消费不同的消息,工单***消费消息后进行锁竞争(请求锁),并在竞争到锁之后,执行相应的工单任务,同一时刻仅有一个工单***在执行工单任务,在任务执行完毕后,释放锁,提交offset消息偏移量给kafka消息队列,同时,将执行结果发送至GW集群中进程存储。
图2为本申请实施例提供的一种工单消息分配方法流程示意图,该工单消息分配方法的执行主体可以为kafka集群服务器,如图2所示,该方法包括:
S101、向第一消费节点发送第一工单消息之后,若确定第一消费节点的消费服务不可用,则确定第二消费节点,其中,第一消费节点和第二消费节点订阅的会话相同。
需要说明的是,工单消息可以理解为工单任务,也即待处理事项,而消费节点可以对应于图1中的工单***,也即用于执行待处理事项的***,换言之,工单消息可以对应于工作任务,消费节点可以对应于员工,领导分配工作任务给员工后,员工根据任务要求完成该任务。其中,工单消息可以包括多个,不限于上述的两个,相应的,消费节点的数量可以与工单消息的数量对应。
可选地,接入kafka集群服务器的消费节点可以预先配置顺序,第一消费节点可以是根据***预设配置信息确定出的,kafka集群服务器向预设的第一消费节点发送第一工单消息,其中,第一工单消息可以是与第一消费节点对应的工单任务数据。kafka集群服务器向不同的消费节点发送的工单消息可以是相同的,也可以是根据预设的配置信息所确定的工单消息,也即,上述发送给第二消费节点的第二工单消息可以和第一工单消息相同,也可以不同,不同时,可以是根据预设的配置信息中获取的与第二消费节点对应的第二工单消息。而当发送给第二消费节点的第二工单消息与发送给第一消费节点的第一工单消息相同时,为了避免工单任务执行的重复性,可以添加幂等性保证,也即,即使发送给第二消费节点的第二工单消息与第一工单消息相同,第二消费节点在消费该第二工单消息后,并不能执行该第二工单消息对应的工单任务。从而提高了工单任务执行效率。
当向第一消费节点发送第一工单消息后,第一消费节点可能因为发生故障而导致消费服务不可用,也即与kafka集群服务器通信断开,无法反馈工单消息执行情况给kafka集群服务器,为了避免其他的工单消息因第一消费节点发生故障而无法正常被消费,此时,kafka集群服务器可以从其他多个消费节点中确定出第二消费节点,并向其发送第二工单消息,以保证其他工单消息的正常消费,提高工单消息的处理效率。其中,与第一消费节点的确定方式类似,同样可以根据预设配置信息确定出第二消费节点,并将与第二消费节点对应的工单消息发送给该第二消费节点。
另外,还需要说明的是,多个不同的消费节点订阅的会话相同,也即,不同的消费节点消费的工单消息类型相同,例如:工单消息类型为从数据库中下载文件,这样,第一消费节点对应的第一工单消息可以为从数据库中下载文件1,第二消费节点对应的第二工单消息可以为从数据库中下载文件2,其均属于同一工单消息类型,也即订阅的会话相同。
需要说明的是,基于kafka订阅消息队列进行工单处理时,为了保证工单处理***的高可用性和消息处理的顺序性,kafka业务可以基于一个会话(topic)、一个partition(最小存储单元)、一个消费群组(consumer-group)以及单个GW工单***,而一个消费群组consumer-group中可以包括多个消费者consumer,其中,consumer:kafka消息消费者,读取kafka消息的客户端,同一consumer-group中的consumer订阅的topic相同。
其中,每条发送到kafka的消息都有一个类别,这个类别被成为topic;partition是kafka消息存储的最小单元,每个topic可包含多个partition。
本申请提供的工单消息分配方法,为了保障工单任务处理的高效性,采用了kafka业务基于一个会话(topic)、一个partition(最小存储单元)、一个消费群组(consumer-group)以及多个GW工单***。
对于工单任务执行的顺序性,kafka消息以partition为最小存储单位,同一partition内数据存储可保证顺序性。在工单消息发送至kafka时,可以设定工单消息发送至同一个topic,且此topic只有一个partition,保证工单存储的顺序性。同时kafka消费者从属于一个consumer-group,也即上述的第一消费节点和第二消费节点从属于一个消费群组,一个群组里的消费者订阅的是同一个topic,也即第一消费节点和第二消费节点订阅的会话相同,每个消费者对应消费一个partition消息,也即第一消费节点对应消费第一工单消息,第二消费节点对应消费第二工单消息。当kafka以群组消费同一topic,同一partition时,消费者数量大于partiton数量,多余的消费者只会被闲置,保证工单消费的顺序性。
另外,为了保证工单任务执行的唯一性,一个consumer-group中同一时刻有且仅有一个consumer在消费数据,consumer消费数据后,需获取etcd分布式锁才可执行工单。对于单consumer-group中同一时刻仅有一个consumer在消费数据情况。由工单数据kafka,同一topic下,仅有一个partition,而同一consumer-group下同一partition仅可由一个consumer消费者进行消费保证。
S102、向第二消费节点发送第二工单消息。
在根据上述方法确定出第二消费节点后,向确定出的第二消费节点发送第二工单消息。需要说明的是,当第一消费节点消费服务不可用时,kafka集群服务器并不会重复将第一消费节点对应的第一工单消息发送给第二消费节点,而是根据预设的配置信息,将与第二消费节点对应的第二工单消息发送给第二消费节点,也即,当任一消费节点发生故障时,本申请采用的工单消息分配方法不会重复消费消息,而是顺序执行各消费节点对应的工单消息,也即不会使整个工单消息分配***发生崩溃,停止工作,从而有效提高了工单消息处理效率。
综上,本申请实施例提供的工单消息分配方法,通过采用多消费节点进行消息消费的工作模式,向第一消费节点发送第一工单消息,在第一消费节点消费服务不可用时,确定出第二消费节点,并向第二消费节点发送第二工单消息,保证了工单任务执行的顺序性,避免了在第一消费节点发生故障时,导致整个***发生崩溃,停止工作,从而提高了工单消息的处理效率。
图3为本申请实施例提供的另一种工单消息分配方法流程示意图,进一步地,如图3所示,上述步骤S102中,向第二消费节点发送第二工单消息之后,还包括:
S201、接收第二消费节点发送的锁竞争请求。
在一些实施例中,为了保证工单消息执行的唯一性,也即,同一时刻有且仅有一个消费节点在执行工单任务,本实施例中,可以采用etcd分布式锁机制。
其中,etcd分布式锁机制的维护原理可解释为,所有的消费节点在etcd集群中维护唯一的关键值,当第一消费节点获取此唯一关键值后,给该值加锁,当第二消费节点想获取锁时,发现该关键值已经被加锁,将要等待锁的释放,当第二消费节点竞争到释放的锁后,才能执行相应的工单任务,也即,即使第二消费节点可以先消费消息,获取工单任务,但是只有竞争到锁后,才能开始执行该工单任务,拥有锁的消费节点才能获取到执行任务的权利,从而保证工单执行的唯一性。
可选地,kafka集群服务器发送第二工单消息给第二消费节点后,会接收到第二消费节点发送的锁竞争请求,若此时有锁处于闲置状态,那么,kafka集群服务器可以直接将锁分配给该第二消费节点。
S202、在获取第一消费节点释放的锁之后,根据锁竞争请求将锁分配给第二消费节点。
上述在kafka集群服务器接收到第二消费节点发送的锁竞争请求时,若锁当前还处于使用状态,也即第一消费节点还未释放锁,那么,还需等待第一消费节点释放锁,当检测到第一消费节点释放锁之后,根据第二消费节点发送的锁竞争请求,将锁分配给该第二消费节点。
可选地,当只有第二消费节点竞争锁时,kafka集群服务器会根据第二消费节点发送的锁竞争请求,将锁直接分配给第二消费节点,而当还存在其他消费节点和该第二消费节点一起竞争锁时,可以根据预设的锁竞争规则,对多个消费节点进行排序,从而根据排序结果从多个消费节点中选举出锁竞争成功者,并将锁分配对应的消费节点。可选地,还可以采用其他的竞争规则,本申请不对预设的锁竞争规则进行限制。
进一步地,该工单消息分配方法还包括:
若收到消费节点添加指令,则在添加后的消费节点中选择均衡消费节点,并向该均衡消费节点发送新的工单消息,其中,第一消费节点和均衡消费节点订阅的会话相同。
在一些实施例中,为了提高工单消息分配***的可用性,提高工单任务处理的效率,在任一消费节点消费工单消息的过程中,可以添加更多的消费节点,当kafka集群服务器接收到消费节点添加指令后,会触发消费再均衡,也即,从多个消费节点中重新确定均衡消费节点,并给确定出的均衡消费节点发送新的工单消息,该新的工单消息与已消费的工单消息均属于同一会话。
例如:kafka集群服务器向第一消费节点发送第一工单消息后,第一消费节点处于执行工单的过程中,此时,kafka集群服务器接收到第三消费节点添加指令,该第三消费节点此前不存在于消费者群组中,kafka集群服务器会立刻触发消费再均衡,第二消费节点、第三消费节点中确定出均衡消费节点,并发送新的工单消息给确定出的均衡消费节点。可选地,新的工单消息与已经被消费的其他工单消息是不同的,也即之前并未被的其他消费节点消费。新的工单消息与上述的第一消费节点对应的第一工单消息类别相同,例如,新的工单消息可以是从数据库中下载文件3。通过添加新的消费节点,可以使得工单消息分配***可用性更强,同时可以消费多个工单消息,提高了工单消费效率。
图4为本申请实施例提供的又一种工单消息分配方法流程示意图,进一步地,如图4所示,上述步骤S101中,若确定第一消费节点的消费服务不可用,则确定第二消费节点,包括:
S301、若确定第一消费节点的消费服务不可用,等待预设时长后确定第一消费节点的消费服务是否恢复可用。
可选地,为了避免消费节点的闲置,导致资源的浪费,当第一消费节点发生故障,消费服务不可用时,会等待预设时长来确定第一消费节点的消费服务是否会恢复正常(即,恢复可用状态),若恢复正常,则第一消费节点继续执行工单任务,若不能恢复正常,则释放锁,由下一个消费节点继续执行工单任务。
在一些实施例中,当第一消费节点发生故障时,第一消费节点服务器可以实时检测故障信息,并上报给kafka集群服务器,若在预设时长内kafka集群服务器接收到的均是故障信息,即可以确定第一消费节点的消费服务不可恢复,而若在预设时长内kafka集群服务器接收到故障恢复信息后,则可以确定第一消费节点的消费服务已恢复。
S302、若第一消费节点的消费服务仍不可用,则确定第二消费节点。
可选地,上述若经过预设时长,第一消费节点仍处于故障中,消费服务仍不可用,则可以根据前述的列举的方法,确定出第二消费节点。
综上,本申请实施例提供的工单消息分配方法,通过采用多消费节点进行消息消费的工作模式,向第一消费节点发送第一工单消息,在第一消费节点消费服务不可用时,确定出第二消费节点,并向第二消费节点发送第二工单消息,保证了工单任务执行的顺序性,避免了在第一消费节点发生故障时,导致整个***发生崩溃,停止工作,从而提高了工单任务处理效率。另外,结合etcd分布式锁机制,使得同一时刻有且仅有一个消费节点在执行工单任务,从而有效保证了工单消息执行的唯一性。
图5为本申请实施例提供的一种工单消息分配方法流程示意图,该方法应用于工单消息分配***,该***包括:第一消费节点和第二消费节点;该工单消息分配方法包括:
S401、第二消费节点接收分布式服务器在第一消费节点的消费服务不可用之后发送的工单消息。
可选地,上述工单消息分配***包含的消费节点不限于第一消费节点和第二消费节点,消费节点的数量不限于两个,可以为多个,本实施例中以两个消费节点进行辅助解释说明。
在一些实施例中,kafka集群服务器在确定第一消费节点的消费服务不可用之后,会发送第二工单消息给第二消费节点,第二消费节点服务器接收该第二工单消息,并进行消息消费,其中,消息消费也可以理解为,从第二工单消息中获取工单执行任务,也即员工接收领导分配的作业任务。
S402、第二消费节点根据工单消息进入等待状态。
可选地,为了保证任务执行的唯一性,即同一时刻有且仅有一个任务在执行,第二消费节点在获取到工单执行任务后,并不会立刻执行任务,而是进入等待状态,也即等待下发开始执行任务的口令。例如:百米赛跑中,运动员消费消息,知道自己的任务是跑完一百米,当消费消息后,运动员会处于等待状态,也即预备状态,还需等待裁判的起跑口哨,哨声响起,才能开始跑,去完成任务。
图6为本申请实施例提供的另一种工单消息分配方法流程示意图,进一步地,如图6所示,上述步骤S402中,第二消费节点根据工单消息进入等待状态,包括:
S501、向分布式服务器发送锁竞争请求。
上述第二消费节点进入等待状态后,需要向kafka集群服务器发送锁竞争请求,在锁竞争成功后,该第二消费节点可以根据接收的第二工单消息,执行相应的工单任务。
可选地,步骤S402,第二消费节点根据工单消息进入等待状态之后,还包括:
S502、接收分布式服务器在第一消费节点释放锁之后分配的锁。
可选地,第二消费节点锁竞争成功后,会接收kafka集群服务器发送的锁,其中,该锁可以是第一消费节点在执行第一工单任务后释放的锁,kafka集群服务器获取第一消费节点释放的锁,并根据第二消费节点发送的锁竞争请求,将锁分配给第二消费节点。
S503、基于锁执行工单消息对应的工单。
第二消费节点获取到锁后,根据消费的第二工单消息,执行相应的工单任务。在第二消费节点执行工单任务完成后,相应的,也需要将锁释放给kafka集群服务器,以便于其他消费节点继续获取锁,执行任务,保证任务执行的不间断性。
进一步地,基于锁执行工单消息对应的工单,包括:
基于锁、以及预配置的幂等性策略,执行工单消息对应的工单。
需要说明的是,消费节点消费消息是以offset维护的,offset即消息偏移量,定位消息的位置,也即,通过offset可以获取到已执行完的工单任务消息和当前待执行工单任务的消息,若上述第一消费节点一直处于正常工作状态,未发生故障,则第一消费节点在执行完工单任务后,会提交offset给kafka集群服务器,kafka集群服务器可以根据定位的当前待执行工单任务,发送工单消息给第二消费节点。而若上述第一消费节点在消费第一工单消息后发生故障,与kafka集群服务器断开通信,这样,虽然第一消费节点会继续执行第一工单消息对应的工单任务,但在执行完毕后,并不会提交offset给kafka集群服务器,这样,kafka集群服务器可能会将第一消费节点对应的第一工单消息继续发送给第二消费节点,第二消费节点消费该工单消息后,会继续执行该工单消息对应的工单任务,从而导致工单任务的重复执行。
为了有效避免上述的工单任务重复执行现象,根据结合幂等性保证进行工单任务的执行。可以理解为,每个工单消息均对应有标识ID,任一工单消息一旦被一个消费节点消费,其标识ID将被kafka集群服务器记录,当再有其他消费节点重复消费该工单消息时,服务器可以根据已记录的工单消息ID,确定该工单消息对应的工单任务不会被再次执行,从而避免了工单任务的重复执行。也即,即使同一个工单消息被多个消费节点获取,但是只有一个消费节点可以根据去执行该工单消息对应的工单任务。
例如:第一消费节点消费了第一工单消息后,第一消费节点发生了故障,第一消费节点与kafka集群服务器通信断开,第一消费节点仍然执行第一工单消息对应的工单任务,在执行完后,未提交offset给kafka集群服务器,kafka集群服务器所维护的offset为未更新的offset,也即第一工单消息未被消费的offset,这样,kafka集群服务器会将第一工单消息又发送给第二消费节点,第二消费节点继续消费该第一工单消息,但由于添加了幂等性保证,第一工单消息在被第一消费节点消费后,第一工单消息的ID已被kafka集群服务器记录,这样,虽然第二消费节点可以再次消费该第一工单消息,或者不限于第二消费节点,还有更多的消费节点,例如,第三消费节点、第四消费节点均消费了该第一工单消息,但是真正的该第一工单消息对应的工单任务只会被执行一次,也即被第一个消费该工单消息的第一消费节点执行工单任务,从而有效避免了工单任务被重复执行。
综上,本申请实施例提供的工单消息分配方法,通过采用多消费节点进行消息消费的工作模式,向第一消费节点发送第一工单消息,在第一消费节点消费服务不可用时,确定出第二消费节点,并向第二消费节点发送第二工单消息,保证了工单任务执行的顺序性,避免了在第一消费节点发生故障时,导致整个***发生崩溃,停止工作。其次,结合etcd分布式锁机制,使得同一时刻有且仅有一个消费节点在执行工单任务,从而有效保证了工单消息执行的唯一性。另外,在工单任务执行过程中,添加幂等性保证,使得同一个工单消息无论被消费几次,该工单消息对应的工单任务只会被执行一次,从而有效避免了工单任务的重复执行。
图7为本申请实施例提供的一种工单消息分配装置结构示意图,该装置包括:确定模块601、第一发送模块602;
确定模块601,用于向第一消费节点发送第一工单消息之后,若确定第一消费节点的消费服务不可用,则确定第二消费节点,其中,第一消费节点和第二消费节点订阅的会话相同;
第一发送模块602,用于向第二消费节点发送第二工单消息。
进一步地,如图8所示,装置还包括:接收模块603、分配模块604;
接收模块603,用于接收第二消费节点发送的锁竞争请求;
分配模块604,用于在获取第一消费节点释放的锁之后,根据锁竞争请求将锁分配给第二消费节点。
进一步地,如图9所示,装置还包括:第二发送模块605;
第二发送模块605,用于若收到消费节点添加指令,则在添加后的消费节点中选择均衡消费节点并向均衡消费节点发送新的工单消息,其中,第一消费节点和均衡消费节点订阅的会话相同。
进一步地,确定模块601,具体用于若确定第一消费节点的消费服务不可用,等待预设时长后确定第一消费节点的消费服务是否恢复可用;若第一消费节点的消费服务仍不可用,则确定第二消费节点。
图10为本申请实施例提供的一种工单消息分配装置结构示意图,如图10所示,该装置包括:接收模块701、待定模块702;
接收模块701,用于第二消费节点接收分布式服务器在第一消费节点的消费服务不可用之后发送的工单消息;
待定模块702,用于第二消费节点根据工单消息进入等待状态。
进一步地,如图11所示,装置还包括:发送模块703、执行模块704;
发送模块703,用于向分布式服务器发送锁竞争请求;
接收模块701,还用于接收分布式服务器在第一消费节点释放锁之后分配的锁;
执行模块704,用于基于锁执行工单消息对应的工单。
进一步地,执行模块704,具体用于基于锁、以及预配置的幂等性策略,执行工单消息对应的工单。
上述装置用于执行前述实施例提供的方法,其实现原理和技术效果类似,在此不再赘述。
以上这些模块可以是被配置成实施以上方法的一个或多个集成电路,例如:一个或多个特定集成电路(Application Specific Integrated Circuit,简称ASIC),或,一个或多个微处理器(digital singnal processor,简称DSP),或,一个或者多个现场可编程门阵列(Field Programmable Gate Array,简称FPGA)等。再如,当以上某个模块通过处理元件调度程序代码的形式实现时,该处理元件可以是通用处理器,例如中央处理器(CentralProcessing Unit,简称CPU)或其它可以调用程序代码的处理器。再如,这些模块可以集成在一起,以片上***(system-on-a-chip,简称SOC)的形式实现。
图12为本申请实施例提供的一种服务器结构示意图,该服务器可以集成于工单处理设备或者工单处理设备的芯片,该工单处理设备可以是具备工单消息分配功能的计算设备。
该服务器包括:处理器801、存储器802。
存储器802用于存储程序,处理器801调用存储器802存储的程序,以执行上述方法实施例。具体实现方式和技术效果类似,这里不再赘述。
可选地,本发明还提供一种程序产品,例如计算机可读存储介质,包括程序,该程序在被处理器执行时用于执行上述方法实施例。
在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(英文:processor)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(英文:Read-Only Memory,简称:ROM)、随机存取存储器(英文:Random Access Memory,简称:RAM)、磁碟或者光盘等各种可以存储程序代码的介质。

Claims (8)

1.一种工单消息分配方法,其特征在于,包括:
向第一消费节点发送第一工单消息之后,若确定所述第一消费节点因与分布式服务器通信断开而导致消费服务不可用,则确定第二消费节点,其中,所述第一消费节点和所述第二消费节点订阅的会话相同;
向所述第二消费节点发送第二工单消息,以使所述第二消费节点从所述第二工单消息中获取第二工单任务,并在竞争到锁后执行所述第二工单任务;其中,所述锁为所述第一消费节点执行第一工单任务后释放的锁;
其中,所述若确定所述第一消费节点因与分布式服务器通信断开而导致消费服务不可用,则确定第二消费节点,包括:
若确定所述第一消费节点的消费服务不可用,等待预设时长后确定所述第一消费节点的消费服务是否恢复可用;若所述第一消费节点的消费服务仍不可用,则确定第二消费节点;
所述向所述第二消费节点发送第二工单消息之后,还包括:
接收所述第二消费节点发送的锁竞争请求;在获取所述第一消费节点释放的锁之后,根据所述锁竞争请求将所述锁分配给所述第二消费节点。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若收到消费节点添加指令,则在添加后的消费节点中选择均衡消费节点并向所述均衡消费节点发送新的工单消息,其中,所述第一消费节点和所述均衡消费节点订阅的会话相同。
3.一种工单消息分配方法,其特征在于,所述方法应用于工单消息分配***,所述***包括:第一消费节点和第二消费节点,所述方法包括:
第二消费节点接收分布式服务器在所述第一消费节点因与分布式服务器通信断开而导致消费服务不可用之后发送的第二工单消息;并从所述第二工单消息中获取第二工单任务;
所述第二消费节点向所述分布式服务器发送锁竞争请求,并在竞争到锁后执行所述第二工单任务;其中,所述锁为所述第一消费节点执行第一工单任务后释放的锁;
其中,所述执行所述第二工单任务,包括:
基于所述锁、以及预配置的幂等性策略,执行所述工单消息对应的工单。
4.一种工单消息分配装置,其特征在于,包括:确定模块、第一发送模块、接收模块、分配模块;
所述确定模块,用于向第一消费节点发送第一工单消息之后,若确定所述第一消费节点因与分布式服务器通信断开而导致消费服务不可用,则确定第二消费节点,其中,所述第一消费节点和所述第二消费节点订阅的会话相同;
所述第一发送模块,用于向所述第二消费节点发送第二工单消息,以使所述第二消费节点从所述第二工单消息中获取第二工单任务,
所述接收模块,用于接收所述第二消费节点发送的锁竞争请求;
所述分配模块,用于在获取所述第一消费节点释放的锁之后,根据所述锁竞争请求将所述锁分配给所述第二消费节点,以使所述第二消费节点在竞争到锁后执行所述第二工单任务;其中,所述锁为所述第一消费节点执行第一工单任务后释放的锁;
所述确定模块,具体用于若确定所述第一消费节点的消费服务不可用,等待预设时长后确定所述第一消费节点的消费服务是否恢复可用;若所述第一消费节点的消费服务仍不可用,则确定第二消费节点。
5.根据权利要求4所述的装置,其特征在于,所述装置还包括:第二发送模块;
所述第二发送模块,用于若收到消费节点添加指令,则在添加后的消费节点中选择均衡消费节点并向所述均衡消费节点发送新的工单消息,其中,所述第一消费节点和所述均衡消费节点订阅的会话相同。
6.一种工单消息分配装置,其特征在于,包括:接收模块、执行模块、发送模块;
所述接收模块,用于第二消费节点接收分布式服务器在第一消费节点因与分布式服务器通信断开而导致消费服务不可用之后发送的工单消息;并从第二工单消息中获取第二工单任务;
所述发送模块,用于向所述分布式服务器发送锁竞争请求;
所述执行模块,用于所述第二消费节点在竞争到锁后执行所述第二工单任务;其中,所述锁为所述第一消费节点执行第一工单任务后释放的锁;
所述执行模块,具体用于基于所述锁、以及预配置的幂等性策略,执行所述工单消息对应的工单。
7.一种服务器,其特征在于,包括:处理器、存储介质和总线,所述存储介质存储有所述处理器可执行的程序指令,当服务器运行时,所述处理器与所述存储介质之间通过总线通信,所述处理器执行所述程序指令,以执行时执行如权利要求1至3任一所述的工单消息分配方法的步骤。
8.一种存储介质,其特征在于,所述存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行如权利要求1至3任一所述的工单消息分配方法的步骤。
CN201910902122.2A 2019-09-23 2019-09-23 工单消息分配方法、装置、服务器及存储介质 Active CN111835809B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910902122.2A CN111835809B (zh) 2019-09-23 2019-09-23 工单消息分配方法、装置、服务器及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910902122.2A CN111835809B (zh) 2019-09-23 2019-09-23 工单消息分配方法、装置、服务器及存储介质

Publications (2)

Publication Number Publication Date
CN111835809A CN111835809A (zh) 2020-10-27
CN111835809B true CN111835809B (zh) 2023-04-18

Family

ID=72912020

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910902122.2A Active CN111835809B (zh) 2019-09-23 2019-09-23 工单消息分配方法、装置、服务器及存储介质

Country Status (1)

Country Link
CN (1) CN111835809B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113590314A (zh) * 2021-07-13 2021-11-02 上海一谈网络科技有限公司 网络请求数据处理方法和***
CN117114366A (zh) * 2023-10-23 2023-11-24 天津中新智冠信息技术有限公司 工单派发方法、装置、电子设备及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104092767A (zh) * 2014-07-21 2014-10-08 北京邮电大学 一种增加消息队列模型的发布/订阅***及其工作方法
WO2016206281A1 (zh) * 2015-06-23 2016-12-29 中兴通讯股份有限公司 消费配额监控方法及装置、存储介质
CN109190025A (zh) * 2018-08-21 2019-01-11 北京京东尚科信息技术有限公司 信息监控方法、装置、***和计算机可读存储介质
CN109656725A (zh) * 2018-11-09 2019-04-19 北京字节跳动网络技术有限公司 消息消费者切换方法、装置、存储介质及电子设备

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104092767A (zh) * 2014-07-21 2014-10-08 北京邮电大学 一种增加消息队列模型的发布/订阅***及其工作方法
WO2016206281A1 (zh) * 2015-06-23 2016-12-29 中兴通讯股份有限公司 消费配额监控方法及装置、存储介质
CN109190025A (zh) * 2018-08-21 2019-01-11 北京京东尚科信息技术有限公司 信息监控方法、装置、***和计算机可读存储介质
CN109656725A (zh) * 2018-11-09 2019-04-19 北京字节跳动网络技术有限公司 消息消费者切换方法、装置、存储介质及电子设备

Also Published As

Publication number Publication date
CN111835809A (zh) 2020-10-27

Similar Documents

Publication Publication Date Title
JP6336988B2 (ja) 使用要求の小バッチ処理のためのシステムおよび方法
EP3489825A1 (en) Method, apparatus and computer readable storage medium for processing service
CN109117252B (zh) 基于容器的任务处理的方法、***及容器集群管理***
CN109766172B (zh) 一种异步任务调度方法以及装置
CN111338773A (zh) 一种分布式定时任务调度方法、调度***及服务器集群
US10884880B2 (en) Method for transmitting request message and apparatus
WO2021159831A1 (zh) 编程平台的用户代码运行方法及平台、节点、设备、介质
CN111835809B (zh) 工单消息分配方法、装置、服务器及存储介质
CN113886089A (zh) 一种任务处理方法、装置、***、设备及介质
CN112162852A (zh) 一种多架构cpu节点的管理方法、装置及相关组件
CN105373563B (zh) 数据库切换方法及装置
CN111163140A (zh) 资源获取和分配的方法、装置和计算机可读存储介质
RU2696299C2 (ru) Управление при инициировании элементарных задач на серверной платформе
CN112286688B (zh) 一种内存管理和使用方法、装置、设备和介质
CN105550025A (zh) 分布式基础设施即服务(IaaS)调度方法及***
CN112631756A (zh) 一种应用于航天测控软件的分布式调控方法及装置
CN111831408A (zh) 异步任务处理方法、装置、电子设备及介质
CN114710485B (zh) 处理方法和处理装置
CN113434591B (zh) 数据处理方法以及装置
CN113965563B (zh) 基于模型的业务处理方法及装置、服务器
CN114489978A (zh) 资源调度方法、装置、设备及存储介质
CN113703930A (zh) 任务调度方法、装置及***、计算机可读存储介质
CN111045778B (zh) 一种虚拟机的创建方法、装置、服务器及存储介质
CN116010126B (zh) 一种服务聚合方法、装置及***
KR101542605B1 (ko) 온톨로지 매칭의 시멘틱 이질성 병렬 처리 장치 및 처리 방법

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant