我们正在设计一个大型的分布式事件驱动系统,用于跨事务数据库的实时数据复制。 来自源系统的数据(消息)在到达目的地之前经历了一系列转换和路由逻辑。 这些转换是多进程和多线程的操作,包括可以同时执行的较小的无状态步骤和任务。 相反,没有跨进程的共享状态,状态转换保留在数据库中,每个进程都直接从数据库中提取其工作队列。
基于此,我们需要一种在Java + Spring平台上支持分布式事件处理,路由和并发的技术,其中考虑的三个选项是MessageBroker(RabbitMQ),Spring Integration和Akka。
RabitMQ: MQ是首选,因为它是消息传递/事件处理的传统且经过验证的解决方案。 RabbitMQ,因为它是流行的轻量级开源选项,并获得了我们已经使用过的供应商的商业支持。 RabbitMQ给我留下了深刻的印象,它易于使用,精简但仍支持高级分发和消息传递功能。 它对我们而言唯一缺少的是在Oracle中保留消息的能力。
即使RabbitMQ是开放源代码(免费),但对于企业而言,它还是有相当大的成本因素。 由于MQ是中间件堆栈中的一个附加组件,因此它需要专门的人员来进行管理和维护以及产品的商业支持。 同样,MesageBroker的设置和配置也有其自身的复杂性,并且涉及跨团队的协调。
MQ主要是EAI产品,并提供跨平台(多语言,