
按顺序处理事件
当需要确保事件按顺序处理并且在处理下一个事件之前完整处理当前事件时,可以使用事件排序限定符。
关于此任务
有时,您需要确保数据按顺序处理。例如,要确保在处理员工记录的任何更新事件之前创建该员工记录。 客户机确定事件发送至组件的顺序,但控制客户机向队列提供事件的顺序是不够的。将添加新员工记录的事件可能处理较缓慢,而更新事件可能执行较快速。您可以为此类事件建立限定符以确保按接收顺序对其进行处理。
服务收到事件时,这些事件将加入队列。安排以接收顺序处理这些事件,但运行时环境是多线程环境。多个进程为该队列提供服务,每个进程可以不同的速度运行,因此可以不同于交付至队列的顺序处理这些事件。在事件出队列的时间与对服务调用对应操作的时间之间存在延迟。在该期限内,下一个事件可能会出队列并且可能调用其对应的操作。处理延迟可能会导致在第一个事件之前处理第二个事件。如果处理顺序很重要,您可以通过事件排序限定符来提供一种方法对其进行控制。
一旦您决定需要对组件使用事件排序限定符,就需要计划您希望如何使用这些限定符。首先,请查看组件接口上的操作。标识要包含在顺序中的操作。由于组件处理各种对象,因此您可能会发现需要两个或更多个顺序。例如,常规酒店组件可能具有一组用于预订酒店房间的操作,和另一组用于预订会议大厅的操作。
组标识哪些操作将参与顺序。例如,将 reserve_hotel_room 和 clean_hotel_room 放入一组,将 book_convention_hall 和 set_up_convention_hall 放入另一组,并假设酒店房间的相关操作与会议大厅的相关操作完全独立。
键标识要处理的对象。第一组操作的键是房间编号,例如 201(2 楼 01 号房间)。第二组操作的键可能是房间名称,例如“主会议室”和“西放映室”。标识这些属性之后,您就需要对指定该键的所有操作添加事件排序限定符。下面的指示信息解释如何执行这些任务。
事件排序限定符会在将事件发送至目标组件之前获取一个锁。业务逻辑执行完成后,释放该锁。 由于一个任务必须完成,下一个任务才能开始,因此您需要注意应用该功能的位置。确保不会使必要进程停顿不可接受的时间,因为您已对事件可能需要长时间完成的一些情况应用排序。
要对与操作相关的事件建立顺序,请执行以下步骤: