CN112015563B - 消息队列切换方法、装置、电子设备及存储介质 - Google Patents
消息队列切换方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN112015563B CN112015563B CN202010911553.8A CN202010911553A CN112015563B CN 112015563 B CN112015563 B CN 112015563B CN 202010911553 A CN202010911553 A CN 202010911553A CN 112015563 B CN112015563 B CN 112015563B
- Authority
- CN
- China
- Prior art keywords
- message
- environment
- operation environment
- message queue
- queue
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/524—Deadlock detection or avoidance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
Abstract
本发明提供一种消息队列切换方法、装置、电子设备及存储介质,应用于消息服务器中,包括如下步骤:接收处于第一操作环境的第一消息数据和接收处于第二操作环境的第二消息数据,当第一操作环境与第二操作环境不同时,识别第二操作环境是否为预设操作环境,当第二操作环境是所述预设操作环境时,将第一消息数据添加到第一消息队列,将第一消息队列配置互斥锁进行锁定,执行第一消息队列中的消息。本技术方案的消息队列切换方法、装置、电子设备及存储介质根据接收的第一消息数据以及第二消息数据,对操作环境进行识别,如果为预设操作环境时,执行第一消息队列中的消息,保证不同环境下的服务正常运行,可应用于智慧医疗,从而推动智慧城市的建设。
Description
技术领域
本发明涉及数据处理技术领域,尤其涉及一种消息队列切换方法、装置、电子设备及存储介质。
背景技术
现有技术的消息队列(Mq)一般是随着服务启动而启动,随着服务停止而停止,而当在工作日中业务繁忙时消息队列的代码出现了错误,难以立刻将正在运行的服务停止并且做出切换。如果采用直接重启的方式进行切换会导致业务停止,轮询切换会同时执行,使得正确代码和错误代码都在生产环境上执行,可能会导致不可预料的逻辑问题。如果将当前操作环境下的消息队列对应的生产端及消费端单独执行启动操作或停止操作,然而,现有的这种方法会将其它操作环境下的生产端和消费端一起停止,不能达到切换单个生产端、消费端服务的效果,会对将不同操作环境的其他生产端、消费端一同进行切换。因此,如何保证消息队列在不同操作环境下的切换时正常运行成为本领域技术人员亟待解决的问题。
发明内容
本发明的目的在于提供一种消息队列切换方法、装置、电子设备及存储介质,以解决上述现有技术中的不同操作环境下容易出现异常的问题。
为了实现上述目的,本发明提供一种消息队列切换方法,应用于消息服务器中,包括如下步骤:
S1.接收处于第一操作环境的第一消息数据;
S2.接收处于第二操作环境的第二消息数据;
S3.当所述第一操作环境与所述第二操作环境不同时,识别所述第二操作环境是否为预设操作环境;
S4.当所述第二操作环境是所述预设操作环境时,将所述第一消息数据添加到第一消息队列;
S5.将所述第一消息队列配置互斥锁,所述第一操作环境拥有所述互斥锁,所述互斥锁通过互斥属性进行锁定,执行所述第一消息队列中的消息。
进一步的,在执行完步骤S2以后还包括步骤:
A1.判断所述第一操作环境与所述第二操作环境是否相同,若早,执行步骤A2;若否,执行步骤S3;
A2.将所述第一消息数据和所述第二消息数据依次发送至第一消息队列。
进一步的,所述A1判断所述第一操作环境与所述第二操作环境是否相同,包括:
分别读取所述第一操作环境的用户标识和读取所述第二操作环境的用户标识;
比较所述第一操作环境的用户标识与所述第二操作环境的用户标识是否相同。
进一步的,所述消息队列切换方法还包括:
S6.当所述第二操作环境不是所述预设操作环境时,将所述第一消息数据发送至第二消息队列,将所述第二消息数据发送至第一消息队列;
S7.执行所述第二消息队列中的消息。
进一步的,执行完步骤S7还包括:
S8.执行所述第一消息队列中的消息,消息包括消息描述符和消息体,消息描述符包括消息的特征,消息体包括用户数据部分。
进一步的,所述预设操作环境为灰度环境,灰度环境包括部分灰度、全部灰度和灰度完成,部分灰度将前后数据分别处理,全部灰度对前后数据进行双写,灰度完成对在后数据进行处理。
进一步的,所述第一消息队列和所述第二消息队列均包括本地队列和远程队列,所述本地队列进行本地存储的读写,所述远程队列指向远程主机进行读写。
为了实现上述目的,本发明提供一种消息队列切换装置,应用于消息服务器中,包括接收模块、识别模块和处理模块,所述接收模块用于接收处于第一操作环境的第一消息数据,还用于接收处于第二操作环境的第二消息数据,所述识别模块用于当所述第一操作环境与所述第二操作环境不同时,识别所述第二操作环境是否为预设操作环境,所述处理模块用于当所述第二操作环境是所述预设操作环境时,将所述第一消息数据添加到第一消息队列,将所述第一消息队列配置互斥锁,所述第一操作环境拥有所述互斥锁,所述互斥锁通过互斥属性进行锁定,执行所述第一消息队列中的消息。
为了实现上述目的,本发明还提供一种电子设备,所述电子设备包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现前述方法的步骤。
为了实现上述目的,本发明还提供一种计算机可读存储介质,存储介质上存储有计算机程序,所述存储介质存储的所述计算机程序被处理器执行时实现前述方法的步骤。
通过采用上述技术方案,本发明相对于现有技术具有如下有益效果:
本技术方案的消息队列切换方法、装置、电子设备及存储介质根据接收处于第一操作环境的第一消息数据以及接收处于第二操作环境的第二消息数据,对操作环境进行识别,如果第二操作环境为预设操作环境时,将第一消息数据添加到第一消息队列,通过配置互斥锁使第一操作环境通过互斥属性进行锁定,执行第一消息队列中的消息,当操作环境切换时执行第一消息队列中的消息,保证不同环境下的服务正常运行。
附图说明
图1为本发明的消息队列切换方法一个实施例的流程框图;
图2为本发明的消息队列切换装置一个实施例的结构框图;
图3为本发明电子设备的一个实施例的硬件架构图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
参阅图1,示出了本发明一种消息队列切换方法,应用于消息服务器中,包括以下步骤:
S1.接收处于第一操作环境的第一消息数据;
S2.接收处于第二操作环境的第二消息数据;
在本实施例中,可在不同的操作环境下可实现不同的功能,操作环境可包括测试环境、生产环境和灰度环境等,测试环境用于对系统各功能的测试,生产环境为线上用户使用的环境,在系统更新进行生产环境之前有灰度环境,灰度环境用于不同操作环境下的过渡。消息数据作为消息体,根据不同通信协议定义的固定格式进行编码的数据包,用来封装业务数据,实现消息的传输,每一消息数据都包括处于其操作环境下对应的信息。消息服务器作为消息队列的服务器实体,用于执行消息路由和传送,接收消息数据,可作为服务器提供消息核心服务。
在本实施例中,消息服务器收发来自于处于第一操作环境的第一消息数据和处于第二操作系统的第二消息数据,第一消息数据和第二消息数据均可来自于生产端,生产端将消息发送至消息服务器,由消息服务器将数据发送到消息队列中,消费端是从消息队列里获取数据。例如:当生产端将数据放到消息队列中,消息队列有数据了,主动唤醒消费端提取数据。
执行完步骤S2以后还可包括步骤:
A1.判断所述第一操作环境与所述第二操作环境是否相同,若是,执行步骤A2;若否,执行步骤S3;
具体地,步骤A1包括:
分别读取所述第一操作环境的用户标识和所述第二操作环境的用户标识;
比较所述第一操作环境的用户标识与所述第二操作环境的用户标识是否相同。
在实际应用中,可通过用户标识来区分用户,辅助数据统计,保证不同环境切换过程中连贯性,避免用户在新旧版本中跳变,如在匿名Web应用中可采用IP、Cookie等,需登录的应用可直接采用应用的账号体系,同一操作环境下可具有相同的用户标识。
A2.将所述第一消息数据和所述第二消息数据依次发送至第一消息队列。
也就是当第一操作环境与第二操作环境相同时,将第一消息数据和第二消息数据放到同一消息队列中执行,按第一消息队列的执行方式执行。
S3.当所述第一操作环境与所述第二操作环境不同时,识别所述第二操作环境是否为预设操作环境;
消息服务器对操作环境进行识别,在不同的操作环境下具有不同的参数设置,可识别出第二操作环境是否为预设操作环境。
S4.当第二操作环境是预设操作环境时,将第一消息数据添加到第一消息队列。
如果第二操作环境是预设操作环境,则先在第一操作环境下运行,消息服务器将第一消息数据添加到第一消息队列,执行第一消息队列中的消息,由生产端通过消息服务器将数据发送到第一消息队列中,由消费端从第一消息队列中获取数据。其中,预设操作环境为灰度环境,可以理解的是,第一操作环境与第二操作环境也可以是测试环境和生产环境等,灰度环境作为新功能或新版本的过渡中系统执行的环境。
在消息服务器如需要使用到数据库,如数据库在不同环境下数据不一致,灰度环境包括部分灰度、全部灰度和灰度完成。部分灰度将前后数据分别处理,也就是部分灰度将新旧数据库分成两部分分别进行读写处理,在部分灰度的情况下,有部分请求到旧系统上如第一操作环境,另一部分请求到了新的灰度系统上如第二操作环境,运行到旧系统的请求,还是照原样处理,但是走到了新版灰度系统的请求,需要同时将请求转发给旧系统上来对应的接口上修改旧系统的数据,如果走到新系统的请求查不到该用户的数据,还需要首先同步一份来新系统上,如果是事务性的请求,以写入老系统成功作为操作成功的标准。全部灰度对前后数据进行双写,也就是全部灰度对新老数据库进行双写,在全部灰度中,在灰度系统已经全部接管了线上流量之后,为了安全起见,通常仍然需要对新老系统也就是第一操作环境和第二操作环境进行双写,步骤和前面一样,灰度完成与前面的全量灰度状态不太一样,区别在于前面的全量灰度状态下,仍然不能肯定系统一定是没有问题的,所以需要进行新旧系统的双写来保证数据可以在老系统上进行回滚。灰度完成对在后数据进行处理,也就是灰度完成在新数据库独立读写处理,旧数据库作同步保留,在灰度完成状态,此时认为这个新版本已经完全通过了验证,无需再写入旧系统了,但是此时可能存在部分在灰度期间没有上线的用户,此时需要做一次同步,从旧系统上将这部分数据同步过来。其中,前后数据可对应于操作环境的变化,表明在不同操作环境改变时消息的处理情况。
S5.将所述第一消息队列配置互斥锁,所述第一操作环境拥有所述互斥锁,所述互斥锁通过互斥属性进行锁定,执行所述第一消息队列中的消息。
对于消息队列的类型,第一消息队列和第二消息队列均包括本地队列和远程队列,本地队列进行本地存储的读写,远程队列指向远程主机进行读写。本地队列可通过API对其进行读写操作的队列,也就是其传输队列可以为在本地进行对消息存储,然后进行转发的队列。远程队列是目的队列在本地的定义,相当于一个地址指针,指向远程主机上的某个目的队列,对其进行读写,不需要占用本地的存储空间。
在本实施例中为所述第一消息队列配置互斥锁,启动所述第一消息数据时,所述第一操作环境拥有互斥锁。互斥锁指一个原子操作,确定如果一个线程锁定了互斥锁,则没有其他线程可以在同一时间成功锁定这个互斥量。互斥锁是一个二元变量,表现为互斥现象的数据结构,其状态为开锁(允许0)和上锁(禁止1),将某个共享资源与某个特定互斥锁在逻辑上绑定(要申请该资源必须先获取锁)。访问公共资源前,必须申请该互斥锁,若处于开锁状态,则申请到锁对象,并立即占有该锁,以防止其他线程访问该资源;如果该互斥锁处于锁定状态,则阻塞当前线程。只有锁定该互斥锁的进程才能释放该互斥锁,其他线程试图释放无效。如果一个线程锁定一个互斥量,在它接触锁定之前,没有其他线程可以锁定这个互斥量。如果一个线程已经锁定了一个互斥锁,第二个线程又试图去锁定这个互斥锁,则第二个线程将被挂起(不占用CPU资源),直到第一个线程解锁,第二个线程则被唤醒并继续执行,同时锁定这个互斥量。确保不同工作环境下的消费端和生产端互斥,防止产生操作异常。
互斥属性包括通用设置、错误检查和重新锁定。通用设置此类型的互斥锁不会检测死锁(PTHREAD_MUTEX_NORMAL),如果线程在不首先解除互斥锁的情况下尝试重新锁定该互斥锁,则会产生死锁,尝试解除由其他线程锁定的互斥锁会产生不确定的行为,如果尝试解除锁定的互斥锁未锁定,则会产生不确定的行为。错误检查此类型的互斥锁可提供错误检查(PTHREAD_MUTEX_ERRORCHECK),如果线程在不首先解除锁定互斥锁的情况下尝试重新锁定该互斥锁,则会返回错误,如果线程尝试解除锁定的互斥锁已经由其他线程锁定,则会返回错误,如果线程尝试解除锁定的互斥锁未锁定,则会返回错误。重新锁定对此类型互斥锁进行重新锁定时不会产生死锁情况(PTHREAD_MUTEX_RECURSIVE),多次锁定互斥锁需要进行相同次数的解除锁定才可以释放该锁,然后其他线程才能获取该互斥锁,如果线程尝试解除锁定的互斥锁已经由其他线程锁定,则会返回错误,如果线程尝试解除锁定的互斥锁未锁定,则会返回错误。
在使用互斥锁之前,必须要初始化互斥锁,可以调用pthread_mutex_init;或者是PTHREAD_MUTEX_INITIALZER(仅用于静态分配内存),如果我们动态分配互斥锁(比如,用malloc),那么,在释放内存之前,还必须调用pthread_mutex_destroy。
在互斥锁锁定后,pthread_mutex_lock(&mtx)用于阻塞调用的解锁,如果这个锁此时正在被其它线程占用,那么pthread_mutex_lock()调用会进入到这个锁的排队队列中,并会进入阻塞状态,直到拿到锁之后才会返回。还可以使用pthread_mutex_trylock()函数进行解锁,这个函数和pthread_mutex_lock()用法一样,只不过当请求的锁正在被占用的时候,不会进入阻塞状态,而是立刻返回,并返回一个错误代码EBUSY,表明有其它线程正在使用这个锁。释放互斥锁比较简单,使用pthread_mutex_unlock()即可。
为了防止干扰,将第一消息队列配置互斥锁,进行控制,使得同时只能存在一个工作环境在运行,保证不同环境下生产端的服务可以正常运行,这时不同工作环境下的代码不相同时就不会相互影响,在两个工作环境之间通过互斥锁来进行控制。本实施方式中,还可以应用于开发环境或测试环境等操作环境中。通过互斥锁防止不同环境的相互影响,如在第一操作环境为生产环境指定生产端和消费端是启动状态时,生产环境拥有锁。若这时启动第二操作环境为灰度环境时,对应的生产端和消费端时会寻求互斥锁,由于互斥锁被生产环境占用时,灰度环境的生产端和消费端就会启动失败,而当执行生产端和消费端的停止命令成功后就会将互斥锁给释放,这时其他环境的生产端和消费端就能启动服务监听,准备执行。
在本实施例中,消息队列切换方法还可包括以下步骤:
S6.当所述第二操作环境不是所述预设操作环境时,将所述第一消息数据发送至第二消息队列,将所述第二消息数据发送至第一消息队列;
在另一种情况下,当第二操作环境不是预设操作环境时,执行第一消息数据,也就是将第一消息数据发送至第二消息队列,而将第二消息数据发送至第一消息队列,将不同操作环境的消息放到不同的消息队列中执行,以避免干扰。
S7.执行所述第二消息队列中的消息。
执行也就是,在对应操作环境下,消费端从相应的第二消息队列里获取数据,执行相应的操作。
进一步的,在执行完步骤S7还可包括:
S8.执行所述第一消息队列中的消息,消息包括消息描述符和消息体,消息描述符包括消息的特征,消息体包括用户数据部分。
按照同样的方式执行,从而将第一消息队列中的消息全部执行完毕,保证系统的正常工作。消息描述符的消息的特征如消息的优先级信息、生命周期和消息id等,消息体的用户数据部分可分为非永久性(non-persistent)消息和永久性(persistent)消息,非永久性消息是存储在内存中的,为了提高性能而设计的,当系统掉电或重新启动时,将不可恢复,永久性消息是存储在硬盘上,具有高可靠性,在网络和系统发生故障等情况下都能确保消息不丢失。
消息队列在执行时的实际应用中的场景可包括:应用耦合、异步处理、限流削峰和日志处理。应用耦合可在多应用间通过消息队列对同一消息进行处理,避免调用接口失败导致整个过程失败;异步处理使多应用对消息队列中同一消息进行处理,应用间并发处理消息,相比串行处理可减少处理时间;限流削峰可应用于如秒杀或抢购等活动中,避免流量过大导致应用系统出错;日志处理解决大量日志传输的问题,确保日志数据的接收、存储和转发。
消息队列在JMS(JAVA Message Service,java消息服务)标准中包括点对点模式(point to point,queue)和发布/订阅模式(publish/subscribe,topic)这两种模式。在点对点模式中,生产端生产消息通过消息服务器发送到消息队列中,然后由消费端从消息队列中取出并且消费消息,每个消息只有一个消费端,生产端和消费端间没有依赖性,生产端发送消息之后,不管有没有消费端在运行,都不会影响到生产端下次发送消息,消费端在成功接收消息之后需向队列应答成功,让消息队列删除当前接收的消息。在发布/订阅模式中,作为生产端的发布者将消息发送到相应的主题中,系统将这些消息传递给多个作为消费端的订阅者,每个消息可以有多个订阅者,发布者和订阅者之间有时间上的依赖性,针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息。
以消费端服务在发布/订阅模式为例,作为消息数据的执行过程,进行停止消费端服务时:
1、用户可在页面触发开始传递消息数据,利用消息队列来广播消息,将停止命令发送到集群下的所有设备;
广播消息是指生产端产生的消息数据将分发给所有订阅这个消息的消费端,这些消息数据同时被推送到多个订阅者,而这些订阅者收到的消息数据都是完整的。在消息数据到达相应的服务器之前订阅的消费端才能收到,未订阅的消费组是无法收到消息数据的。
2、通过反射获取对应消费端;
反射是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。反射提高了程序的灵活性和扩展性,降低耦合性,提高自适应能力。它允许程序创和控制任何类的对象,无需提前硬编码目标类。反射相关的代码都从获得java.lang.Class类对象开始。
3、执行消费端的停止(shutdown)方法,并将互斥锁的控制锁删除并释放。
同样的,在进行启动消费端服务时:
1、用户可在页面触发开始传递消息数据,可利用消息队列来广播消息,将启动命令发送到集群下的所有设备;
2、通过反射获取对应消费端;
3、判断互斥锁是否存在;
4、若存在,则启动失败,若不存在,则执行消费端的启动(start)方法。
本方案应用于不同操作环境下的消息数据的传输,防止不同工作环境下消息队列的干扰,灵活的控制消息数据的传输,保证其它的业务正常的运行,通过采用互斥锁进行控制,可灵活的控制服务中生产端和消费端的启动及停止,使生产端的服务独立,在启动和停止时保证其它的业务服务正常运行;通过互斥锁控制,使得同一时间只存在一个环境在运行,保证多环境服务间的正常运行。
通过本方案对不同环境之前的切换,可以实现灵活控制服务中某个生产端和消费端的启动和停止,同时启动和停止时不用将现行生产的服务停止,并能够保证其他的业务服务正常运行。通过互斥锁控制,最多同时只能存在一个环境在运行,保证多环境的服务间正常运行,使得生产上切换方便,平滑灵活,可通过前端页面点击按钮进行操作来实现,还能够后续新增其它操作环境,具有较高的可扩展性和兼容性,也不需要新增太多服务切换代码。
实施例二
参阅图2,示出了本发明一种消息队列切换装置10,包括接收模块11、识别模块12和处理模块13,所述接收模块11用于接收处于第一操作环境的第一消息数据,还用于接收处于第二操作环境的第二消息数据,所述识别模块12用于当所述第一操作环境与所述第二操作环境不同时,识别所述第二操作环境是否为预设操作环境,所述处理模块13用于当所述第二操作环境是所述预设操作环境时,将所述第一消息数据添加到第一消息队列,将所述第一消息队列配置互斥锁,所述第一操作环境拥有所述互斥锁,所述互斥锁通过互斥属性进行锁定,执行所述第一消息队列中的消息。
在本实施例中,接收模块11可包括生产端和消费端,生产端可作为业务的发方,负责生产消息传输给识别模块12,消费端可作为业务的处理方,负责从识别模块12获取对应的消息并进行业务逻辑处理,识别模块12作为消息队列的服务器实体,用于执行消息路由和传送,可作为服务器提供消息核心服务,处理模块13用于处理传输的消息。
通过本方案,可在不同环境下获得用户的意见反馈,从而可完善产品功能,提升产品质量,并让用户参与到产品的测试中,加强产品与用户的互动,同时由于处于不同操作环境,降低某一操作环境所产生影响的范围,很大程度上能避免新环境中的风险。不同的操作环境的区别包括但不限于地理位置、用户终端特性(如分辨率、性能)、用户自身特点(性别、年龄、忠诚度等)等相对的消息数据。
出于安全性的考虑,本方案可应用于智慧医疗,防止不同操作环境下引发的医疗事故,从而可推动智慧城市的建设。
实施例三
本实施例还提供一种电子设备20,实施例二的消息队列切换装置10的组成部分可设置在电子设备20中,电子设备20可以是执行程序的智能手机、平板电脑、笔记本电脑、台式计算机、机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或者多个服务器所组成的服务器集群)等。本实施例的电子设备20至少包括但不限于:可通过系统总线相互通信连接的存储器21、处理器22以及存储在存储器21上并可在处理器22上运行的计算机程序,如图3所示。需要指出的是,图3仅示出了具有组件21-22的电子设备20,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。
本实施例中,存储器21(即可读存储介质)包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,存储器21可以是电子设备20的内部存储单元,例如该电子设备20的硬盘或内存。在另一些实施例中,存储器21也可以是电子设备20的外部存储设备,例如该电子设备20上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,存储器21还可以既包括电子设备20的内部存储单元也包括其外部存储设备。本实施例中,存储器21通常用于存储安装于电子设备的操作系统和各类应用代码。此外,存储器21还可以用于暂时地存储已经输出或者将要输出的各类数据。
处理器22在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器22通常用于控制电子设备20的总体操作。本实施例中,处理器22用于运行存储器21中存储的程序代码或者处理数据。本实施例中电子设备20的处理器22执行计算机程序时实现实施例一的消息队列切换方法。
实施例四
本实施例还提供一种计算机可读存储介质,如闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘、服务器、App应用商城等等,其上存储有计算机程序,程序被处理器执行时实现相应功能。本实施例计算机可读存储介质存储实施例二的消息队列切换装置10,被处理器执行时实现实施例一的消息队列切换方法。
本实施例的计算机可读存储介质用于消息队列切换装置,该计算机可读存储介质被处理器执行时实现实施例一的消息队列切换方法。
进一步地,所述计算机可读存储介质可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据区块链节点的使用所创建的数据等。
本发明所指区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层等。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
本申请可用于众多通用或专用的计算机系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (7)
1.一种消息队列切换方法,应用于消息服务器中,其特征在于,包括如下步骤:
S1.接收处于第一操作环境的第一消息数据;
S2.接收处于第二操作环境的第二消息数据;
在执行完步骤S2以后还包括步骤:
A1.判断所述第一操作环境与所述第二操作环境是否相同,若是,执行步骤A2;若否,执行步骤S3;
A2.将所述第一消息数据和所述第二消息数据依次发送至第一消息队列;
所述步骤A1判断所述第一操作环境与所述第二操作环境是否相同,包括:
分别读取所述第一操作环境的用户标识和读取所述第二操作环境的用户标识;
比较所述第一操作环境的用户标识与所述第二操作环境的用户标识是否相同;
S3.当所述第一操作环境与所述第二操作环境不同时,识别所述第二操作环境是否为预设操作环境;
S4.当所述第二操作环境是所述预设操作环境时,将所述第一消息数据添加到第一消息队列;
S5.将所述第一消息队列配置互斥锁,所述第一操作环境拥有所述互斥锁,所述互斥锁通过互斥属性进行锁定,执行所述第一消息队列中的消息;
所述互斥属性包括通用设置、错误检查和重新锁定;
S6.当所述第二操作环境不是所述预设操作环境时,将所述第一消息数据发送至第二消息队列,将所述第二消息数据发送至第一消息队列;
S7.执行所述第二消息队列中的消息。
2.根据权利要求1所述的消息队列切换方法,其特征在于,执行完步骤S7还包括:
S8.执行所述第一消息队列中的消息,消息包括消息描述符和消息体,消息描述符包括消息的特征,消息体包括用户数据部分。
3.根据权利要求1所述的消息队列切换方法,其特征在于,所述预设操作环境为灰度环境,灰度环境包括部分灰度、全部灰度和灰度完成,所述部分灰度将前后数据分别处理,全部灰度对前后数据进行双写,灰度完成对在后数据进行处理。
4.根据权利要求1所述的消息队列切换方法,所述第一消息队列和所述第二消息队列均包括本地队列和远程队列,所述本地队列进行本地存储的读写,所述远程队列指向远程主机进行读写。
5.一种消息队列切换装置,应用于消息服务器中,其特征在于,包括:
接收模块,用于接收处于第一操作环境的第一消息数据,还用于接收处于第二操作环境的第二消息数据;
识别模块,用于判断第一操作环境与第二操作环境是否相同,若相同,将所述第一消息数据和所述第二消息数据依次发送至第一消息队列;
判断所述第一操作环境与所述第二操作环境是否相同,包括:分别读取所述第一操作环境的用户标识和读取所述第二操作环境的用户标识;比较所述第一操作环境的用户标识与所述第二操作环境的用户标识是否相同;
当所述第一操作环境与所述第二操作环境不同时,识别所述第二操作环境是否为预设操作环境;
处理模块,用于当所述第二操作环境是所述预设操作环境时,将所述第一消息数据添加到第一消息队列,将所述第一消息队列配置互斥锁,所述第一操作环境拥有所述互斥锁,所述互斥锁通过互斥属性进行锁定,执行所述第一消息队列中的消息;所述互斥属性包括通用设置、错误检查和重新锁定;当所述第二操作环境不是所述预设操作环境时,将所述第一消息数据发送至第二消息队列,将所述第二消息数据发送至第一消息队列,执行所述第二消息队列中的消息。
6.一种电子设备,所述电子设备包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至4任一项所述方法的步骤。
7.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述存储介质存储的所述计算机程序被处理器执行时实现权利要求1至4任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010911553.8A CN112015563B (zh) | 2020-09-02 | 2020-09-02 | 消息队列切换方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010911553.8A CN112015563B (zh) | 2020-09-02 | 2020-09-02 | 消息队列切换方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112015563A CN112015563A (zh) | 2020-12-01 |
CN112015563B true CN112015563B (zh) | 2023-07-07 |
Family
ID=73516424
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010911553.8A Active CN112015563B (zh) | 2020-09-02 | 2020-09-02 | 消息队列切换方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112015563B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112685190A (zh) * | 2020-12-30 | 2021-04-20 | 平安普惠企业管理有限公司 | 基于消息队列的同步调用方法、系统及计算机设备 |
CN113360487A (zh) * | 2021-06-03 | 2021-09-07 | 上海微盟企业发展有限公司 | 一种消息去重方法及相关装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107590072A (zh) * | 2017-08-30 | 2018-01-16 | 深圳乐信软件技术有限公司 | 一种应用开发和测试的方法和装置 |
CN109246051A (zh) * | 2017-05-22 | 2019-01-18 | 中兴通讯股份有限公司 | 灰度发布后链路管理方法、装置、存储介质和计算机设备 |
CN110347520A (zh) * | 2019-06-28 | 2019-10-18 | 北京大米科技有限公司 | 消息分发的方法、装置、电子设备及介质 |
CN110781013A (zh) * | 2019-10-25 | 2020-02-11 | 湖南御家科技有限公司 | 一种灰度发布方法、装置、设备及介质 |
CN111324441A (zh) * | 2020-02-19 | 2020-06-23 | 深圳乐信软件技术有限公司 | 运行环境的切换方法、装置、计算机设备和存储介质 |
-
2020
- 2020-09-02 CN CN202010911553.8A patent/CN112015563B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109246051A (zh) * | 2017-05-22 | 2019-01-18 | 中兴通讯股份有限公司 | 灰度发布后链路管理方法、装置、存储介质和计算机设备 |
CN107590072A (zh) * | 2017-08-30 | 2018-01-16 | 深圳乐信软件技术有限公司 | 一种应用开发和测试的方法和装置 |
CN110347520A (zh) * | 2019-06-28 | 2019-10-18 | 北京大米科技有限公司 | 消息分发的方法、装置、电子设备及介质 |
CN110781013A (zh) * | 2019-10-25 | 2020-02-11 | 湖南御家科技有限公司 | 一种灰度发布方法、装置、设备及介质 |
CN111324441A (zh) * | 2020-02-19 | 2020-06-23 | 深圳乐信软件技术有限公司 | 运行环境的切换方法、装置、计算机设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112015563A (zh) | 2020-12-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20220147491A1 (en) | Scalable, secure, efficient, and adaptable distributed digital ledger transaction network | |
CN106415538B (zh) | 使用共享文件访问-rest接口的文件服务 | |
US5659682A (en) | Scheme to determine completion of directory operations for server recovery | |
US8621600B2 (en) | Non-intrusive background synchronization when authentication is required | |
EP0135499B1 (en) | A method for achieving multiple processor agreement optimized for no faults | |
JP4993905B2 (ja) | サーバー待ち行列システムおよび方法 | |
US7536582B1 (en) | Fault-tolerant match-and-set locking mechanism for multiprocessor systems | |
US7096391B2 (en) | Error message suppression system and method | |
US20200394648A1 (en) | Scalable, secure, efficient, and adaptable distributed digital ledger transaction network | |
US20200396072A1 (en) | Scalable, secure, efficient, and adaptable distributed digital ledger transaction network | |
US11720545B2 (en) | Optimization of chaincode statements | |
JP2003501726A (ja) | サーバ・エージェント・システム | |
WO2020181810A1 (zh) | 应用于集群内多级缓存的数据处理方法和装置 | |
CN112015563B (zh) | 消息队列切换方法、装置、电子设备及存储介质 | |
US11627122B2 (en) | Inter-system linking method and node | |
Pleisch et al. | Approaches to fault-tolerant and transactional mobile agent execution---an algorithmic view | |
CN113806786B (zh) | 一种软件授权管理方法、系统、设备及存储介质 | |
CN107623581B (zh) | 服务列表生成方法、装置及系统,获取、上报方法及装置 | |
CN115757611A (zh) | 大数据集群切换方法、装置、电子设备及存储介质 | |
US20070050447A1 (en) | Method and device arrangement for managing a client/server environment | |
CN113946427A (zh) | 用于多操作系统的任务处理方法、处理器及存储介质 | |
CN113282626A (zh) | 基于Redis的缓存数据的方法、装置、计算机设备及存储介质 | |
CN110677465B (zh) | 一种分布式锁的控制方法及装置 | |
CN110311789B (zh) | 数据安全传输方法及装置 | |
CN112199078A (zh) | 基于安卓碎片组件的Toast消息推送方法、装置及计算机设备 |
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 |