我正在考虑构建一个具有许多数据源的应用程序,每个数据源都将事件放入我的系统中。事件具有明确定义的数据结构,可以使用 JSON 或 XML 进行编码。
我希望能够保证事件被持久保存,并且事件被用作发布/订阅总线的一部分,每个事件可能有多个订阅者。
对于数据库,可用性非常重要,即使它扩展到多个节点,分区容差也很重要,这样我就可以扩展可以存储我的事件的位置的数量。最终的一致性对我来说已经足够了。
我正在考虑使用 JMS 企业消息传递总线(例如Mule)或 AMQP 企业消息传递总线(例如RabbitMQ或ZeroMQ)。
但是对于我的应用程序,似乎如果我可以使用 CouchDB 或类似的东西设置一个发布订阅系统,它会解决我的问题,而无需集成企业消息传递总线和持久存储系统。
哪个会更好,CouchDB + 缩放 + 负载平衡 + 某种 PubSub 机制,还是带有附加最终一致、可用、分区容错存储的显式 PubSub 消息传递系统?哪一个更容易设置、管理和操作?对于给定的成本,哪种解决方案具有高吞吐量?为什么?
另外,在选择我的技术之前,我还应该问其他问题吗?(顺便说一句,Java 是服务器端和客户端语言)。