目标是跟踪E2E流的延迟,还是有一些触发条件导致可以在可配置的时间内收到第二条消息?
如果跟踪延迟,则一些选项包括:
- 为邮件添加时间戳。收到消息后,可以计算并使用等待时间。
- 在邮件中添加UUID,时间戳和当前组件,并将邮件跟踪委托给在UUID上分区的单独服务。
如果某些触发器导致出现第二条消息,则一些选项包括:
- 对相关主题进行分区,以确保预期消息仅到达或不到达1个JVM(类似于上述2个)。这样可以将预期消息列表保存在内存中。删除预期收到的消息,每隔N秒处理一次“未收到”消息。
- 跟踪数据存储(DB /分布式缓存)中的预期消息。收到后,删除记录。定期处理“未收到”消息。
编辑:
注释中包含详细信息,这是一种使用回调样式方法进行处理的方法。可以通过设置分区键将邮件路由到特定服务器。通过添加在UUID上分区的中间主题/服务,应该可以实现以下目标:
- 将消息A发送到ttl_routing_service。消息A应该包括一个UUID,TTL,在何处发送消息(功能主题)以及到期时的操作。
- 路由服务提取消息并在本地缓存中跟踪一些元数据(例如:TTL /超时时要执行的操作),或者启动延迟的协程,然后将消息A路由到包含UUID的功能主题。
- 完成消息A的处理后,可以使用UUID将消息发送到ttl_routing_service,以防止协程或删除缓存的记录。
- 如果未删除,则执行“到期时该怎么办”。