工作过程中用到了消息总线机制。用于通知下游服务并解耦当前操作。

好处显而易见可以加速当前系统访问速度,把原本串行的操作变成多个系统并行处理。

问题如下:

系统中针对各种操作不同,设计了3类消息,add,delete,update。

add 没有问题。问题在于delete和update操作。系统中的delete操作涉及到state状态的变更(假定state=0为删除状态)。

此时,原本设计为按操作区分的消息总线类别,就无法获取到全部信息。

在生产环境接入的过程中,持续迭代会导致后续接入系统的程序员无法区分delete和update,经常会出现调用update(state=0)用来删除信息操作。此类操作实际成功删除信息,因为最终状态信息state和delete操作一致。但是消息会出现在update的消息主题中,而不会出现在delete。

此种情况下,如果有系统需要获取全量删除信息,则需要同时接入delete和update两类消息,但是update总量远大于delete,如果全量接入update进行补全,资源浪费又很严重。

如果对update的信息进行过滤,涉及到state=0的状态转发消息至delete主题,则又会对update引发延时增加。

目前为止,尚未想到完美解决方案。

立此贴记录,期待后续可以有办法解决。