2016-07-26 41 views
1

我是初级后端开发人员,现在我正在开发一个关于银行的项目,这是一个分布式系统。我之前所知道的是,有一些消息库如ZeroMQ来实现分布式系统中组件之间的通信。但是现在,在这个项目中,他们使用了oracle排队。
ZeroMQ与Oracle排队

我的同事告诉我这样做比较好,因为即使流程意外死亡,我们也没有任何风险丢失发送的消息。

我的问题
Q1:如果甲骨文排队比较好,当我们要使用的东西,像ZeroMQ

Q2: Oracle排队的缺点是什么,与ZeroMQ相比?

+0

主要的一点可能是您已经将Oracle用作数据库,因此您也可以将它用于排队。这就像一个免费的功能... – dcieslak

+0

甲骨文的AQ缺点是明确的 - 性能(和价格)。有时候你也可能会遇到一些错误。对于其余功能AQ击败其他(免费)消息系统,事务支持,XA支持,在线备份支持,HA群集支持...... – ibre5041

+1

ZeroMQ是**不是排队机制**。它是一种**传输**机制,为了执行某些事情而进行排队,例如绑定后的对等发现等。您可以保留由ZeroMQ排队的数据,但它不会开箱即用。 ZMQ的另一个优势是市场上没有什么比这更快的了,如果你是一个开发人员处理分布式系统的话,还有其他的好处。 ZMQ不会丢失消息。你的朋友对ZMQ做出了错误的假设,并没有做他的功课。这就是为什么我们在听我们的同行开发人员的随机杂音之前阅读手册。 – Mjh

回答

-1

你的同事就在这里,因为Oracle AQ带有持久性,而zeroMQ是内存中的。如果您需要每秒最大消息(百万),则可以使用zeroMQ。价格不是问题,因为Oracle不会为AQ收取额外费用,Oracle XE甚至免费。

如果您的应用程序已经依赖于Oracle,将消息传递到Oracle中没有任何缺点。

+2

有很多例子说明如何使ZMQ消息持久化(Malamute broker,泰坦尼克服务协议)。断然否认“朋友”是正确的,并转移讨论。 – Mjh

+0

我找不到如何实现持久性ZMQ的任何示例。 ZMQ只能通过ZMQ完成的事实突出表明,ZMQ不适用于这项工作,因为它只涵盖了传输和*而非*持续排队。 OP明确表示他们选择AQ来保证可靠性。 –

+0

我不想强调ZMQ是正确的工具。我在辩论OP的朋友说ZMQ不可靠的部分 - 这完全是错误的。它是一个使用多种通信协议的传输层 - 其中一个是TCP,用于通过不可靠的线路进行可靠通信。至于如何让ZMQ持久化 - 我不会质疑你如何找不到这些例子,但这里是[很多例子,有解释和代码示例](http://zguide.zeromq.org/php:chapter4 )。 – Mjh