ZeroMQ与Oracle队列

ZeroMQ与Oracle队列,oracle,message-queue,zeromq,distributed-system,Oracle,Message Queue,Zeromq,Distributed System,我是一名初级后端开发人员,现在正在从事一个关于银行的项目,这是一个分布式系统。我以前所知道的是,有一些消息库,例如ZeroMQ来实现分布式系统中组件之间的通信。但是现在,在项目中,他们使用了oracle队列。 我的同事告诉我这样更好,因为即使进程意外死亡,我们也不会丢失任何要发送的消息。 我的问题:Q1:如果Oracle队列更好,我们什么时候应该使用像ZeroMQ这样的东西? 和Q2:相比,Oracle队列的缺点是什么?您的同事就在这里,因为Oracle AQ带有持久性,而ZeroMQ位于内存中

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

我的同事告诉我这样更好,因为即使进程意外死亡,我们也不会丢失任何要发送的消息。

我的问题
Q1:
如果Oracle队列更好,我们什么时候应该使用像
ZeroMQ
这样的东西?


Q2:
相比,Oracle队列的缺点是什么?

您的同事就在这里,因为Oracle AQ带有持久性,而ZeroMQ位于内存中。如果您需要每秒的最大消息数(百万),您将使用zeroMQ。价格不是一个问题,因为甲骨文不收取额外的AQ,它甚至免费与甲骨文XE


如果您的应用程序已经依赖Oracle,那么将消息传送到Oracle中并没有缺点。

主要的一点可能是您已经使用Oracle作为数据库,因此您也可以使用它进行排队。这就像是一个免费的功能……Oracle的AQ缺点很明显——性能(以及价格)。有时你也会遇到一些错误。对于其他功能,AQ优于其他(免费)消息传递系统、事务支持、XA支持、在线备份支持、HA群集支持……ZeroMQ不是一种排队机制。它是一种传输机制,随排队而来,用于执行某些操作,如绑定后的对等发现等。您可以持久化ZeroMQ排队的数据,但它不是现成的。ZMQ的另一个优点是,如果你是一个处理分布式系统的开发人员,市场上没有比ZMQ更快的东西,还有其他的好处。ZMQ不会丢失消息。你的朋友对ZMQ做出了错误的假设,没有做家庭作业。这就是为什么我们在听同行开发人员的随意闲谈之前先阅读手册的原因。有很多例子可以说明如何使ZMQ消息持久化(Malamute broker,Titanic service protocol)。这断然否定了“朋友”的正确性,并改变了讨论的方向。我没有找到任何关于如何实现持久ZMQ的例子。使用ZMQ可以完成这项工作的事实只突出表明,ZMQ并不是适合这项工作的工具,因为它只涉及传输,而不涉及持久排队。OP明确表示,他们选择AQ是为了可靠性。我的评论并不是要强调ZMQ是正确的工具。我在辩论OP的朋友说ZMQ不可靠的部分——这完全是错误的。这是一个使用多种通信协议的传输层,其中一种是TCP,它是为了通过不可靠的线路进行可靠通信而设计的。至于如何使ZMQ持久化,我不会质疑你是如何找不到这些示例的,但这里有一个例子。它是不可靠的,因为它可能会在代理关闭时丢失消息。这些例子确实很棒,做得也很好,但尤其是泰坦尼克号的实现,我在生产中不会用到。任何进程都可能在提交之前丢失消息。即使数据库也会这样做,这就是为什么它们会警告您,您可能会损失多达1秒的事务。ZeroMQ指南向您展示了如何实现相同的功能。此外,您不必为p2p连接使用代理。你的回答是误导性的,没有事实根据。OP的朋友并不完全正确。虽然AQ可能是这项工作的正确工具,但提供关于不同产品的完全错误的事实是完全不明智的。抱歉,但该同事并非完全正确,这将提供潜在危险的虚假信息。