这是一个相当普遍的问题。
我想设计一组类和接口,这样我就可以在消息传递系统之间进行交换,而不必更改代码,可能是在RabbitMq和Kafka之间。
我主要关心的是如何抽象它们所处理的事件,因为这两个系统都需要事件处理程序,但是,当然,这两个系统上的事件处理程序是不同的。
发布于 2017-05-10 07:33:59
我建议将业务逻辑模块与通信模块分离。
业务逻辑模块负责数据处理,并与通信逻辑模块有一些接口。
通信模块将只负责接收和发送消息,除基本数据验证外,不进行任何数据处理。通信模块将实现战略模式,其中业务逻辑模块将调用通信模块的公开接口,该接口将有两个实现:一个使用RabbitMq,另一个使用卡夫卡。
假设您的应用程序具有相同的业务逻辑,无论您使用的是RabbitMq还是Kafka (否则您不会问这个问题),您将抽象该业务逻辑,而不是事件处理程序本身。
假设兔子Mq有一个ShutDown事件处理程序,而Kafka有一个叫做停止事件处理程序的东西(可能不是,但为了参数起见)。这个功能将通过ICommunication接口抽象(例如),使用StopWorking方法。然后,RabbitMq将使用ShutDown实现它,而Kafka将使用Stop实现它。业务逻辑模块将看到ICommunication.StopWorking。除此之外发生的一切都与它无关,并与这部分分离开来。
https://softwareengineering.stackexchange.com/questions/348667
复制相似问题