为什么要使用AMQP/ZeroMQ/RabbitMQ

为什么要使用AMQP/ZeroMQ/RabbitMQ,rabbitmq,messaging,zeromq,amqp,Rabbitmq,Messaging,Zeromq,Amqp,而不是编写自己的库 我们正在进行一个项目,这将是一个自划分的服务器池,如果一个部分变得太重,经理会将其划分,并将其作为一个单独的进程放在另一台机器上。它还将提醒所有受此影响的已连接客户端连接到新服务器 我对使用ZeroMQ进行服务器间和进程间通信感到好奇。我的搭档宁愿自己滚。我希望社区能回答这个问题 我自己也是一个相当新手的程序员,刚刚学习了消息队列。正如我在谷歌上搜索和阅读的那样,似乎每个人都在为各种事情使用消息队列,但为什么呢?是什么让它们比编写自己的库更好?为什么它们如此普遍,为什么有这么

而不是编写自己的库

我们正在进行一个项目,这将是一个自划分的服务器池,如果一个部分变得太重,经理会将其划分,并将其作为一个单独的进程放在另一台机器上。它还将提醒所有受此影响的已连接客户端连接到新服务器

我对使用ZeroMQ进行服务器间和进程间通信感到好奇。我的搭档宁愿自己滚。我希望社区能回答这个问题

我自己也是一个相当新手的程序员,刚刚学习了消息队列。正如我在谷歌上搜索和阅读的那样,似乎每个人都在为各种事情使用消息队列,但为什么呢?是什么让它们比编写自己的库更好?为什么它们如此普遍,为什么有这么多

是什么让它们比编写自己的库更好

消息队列系统是事务性的,这在概念上很容易作为客户端使用,但作为实现者很难正确使用,特别是考虑到持久队列。您可能认为您可以编写一个快速消息传递库,但如果没有事务和持久性,您将无法获得消息传递系统的全部好处

在这种情况下,持久性意味着消息传递中间件将未处理的消息保存在永久存储器(磁盘上)中,以防服务器停机;重新启动后,可以处理消息,无需重新传输(发送方甚至不知道有问题)。事务性意味着您可以以事务性的方式从不同的队列读取消息,并将消息写入不同的队列,这意味着所有读取和写入都成功,或者(如果一个或多个失败)没有一个成功。这与数据库接口的事务性没有太大区别,并且具有相同的好处(它简化了错误处理;没有事务,您必须确保每个单独的读/写成功,如果一个或多个失败,您必须回滚那些成功的更改)

是什么让它们比编写自己的库更好

当你推出应用程序的第一个版本时,可能什么都没有:你的需求得到了很好的定义,你将开发一个适合你需求的消息传递系统:小功能列表,小源代码等等

这些工具在第一个版本之后非常有用,因为您实际上需要扩展应用程序并向其添加更多功能。 让我给你几个用例:

  • 您的应用程序必须从一台小型终端计算机(x86、intel/amd)与一台大型终端计算机(sparc/powerpc)通信。您的消息传递系统有一些endian排序假设:去修复它
  • 你设计的应用程序不是二进制协议/消息传递系统,现在速度非常慢,因为你花了大部分时间解析它(消息数量增加,解析成为瓶颈):调整它,以便它可以传输二进制/固定编码
  • 一开始,局域网内有3台机器,没有明显的延迟,每台机器都有。你的客户/老板/尖头恶魔老板出现,告诉你将在你不管理的广域网上安装应用程序,然后你开始出现连接故障、延迟不良等问题。你需要存储消息并稍后重试发送:返回代码并插入这些内容(并享受)

  • 发送的消息需要有回复,但不是所有回复:您发送一些参数并期望结果是一个电子表格,而不是仅仅发送和确认,返回代码并插入这些内容(并享受)

  • 有些消息很关键,接收/发送需要适当的备份/持久性/。你为什么问?审计目的
还有很多我忘记的其他用例


您可以自己实现它,但不必花费太多时间:您以后可能会替换它。

这很像是在问:既然您可以自己编写,为什么还要使用数据库

答案是,使用一个已经存在了一段时间并且在许多不同的用例中都得到了很好的理解的工具,随着时间的推移和需求的发展,回报会越来越高。如果一个项目涉及多个开发人员,这一点尤其正确。如果更改为新项目,是否希望成为排队系统的支持人员?使用工具可以防止这种情况发生。这成了别人的问题

例如:持久性。编写一个在磁盘上存储一条消息的工具很容易。在许多不同的用例中,编写一个可扩展且性能良好且稳定的持久器是很困难的,它是可管理的,并且支持成本低廉。如果你想看到有人抱怨这有多困难,那么看看这个:


不管怎样,我希望这有帮助。一定要写你自己的工具。很多人都这样做了。任何能解决您的问题的方法都是好的。

我正在考虑自己使用ZeroMQ——因此我偶然发现了这个问题

现在让我们假设您能够实现满足所有需求的消息队列系统。为什么您会采用ZeroMQ(或其他第三方库)而不是您自己的方法?简单-成本

让我们假设ZeroMQ已经满足您的所有需求。所有需要做的就是将它集成到您的构建中,阅读一些文档,然后开始使用它。这肯定比你自己滚要省力得多。此外,维护负担已转移到另一家公司。由于ZeroMQ是免费的,这就好像您刚刚发展了您的开发团队,以包括(部分)ZeroMQ团队

如果您经营软件开发业务,那么我认为您可以平衡使用第三方库和使用自己的库的成本/风险,在这种情况下,使用ZeroMQ将轻而易举地获胜

也许你(或者更确切地说,你的合作伙伴)像许多开发人员一样,患有这种综合症?如果是,请