rabbitmq - 为什么使用 AMQP/ZeroMQ/RabbitMQ

标签 rabbitmq messaging zeromq amqp

而不是编写自己的库。

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

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

我自己是一个相当新手的程序员,刚刚了解了消息队列。正如我在谷歌上搜索和阅读的那样,似乎每个人都在使用消息队列来做各种各样的事情,但为什么呢?是什么让它们比编写自己的库更好?为什么它们如此常见并且数量如此之多?

最佳答案

what makes them better than writing your own library?

在推出应用程序的第一个版本时,可能什么都没有:您的需求已明确定义,您将开发一个适合您需求的消息传递系统:小的功能列表、小的源代码等。

在首次发布之后,当您实际上必须扩展应用程序并为其添加更多功能时,这些工具非常非常有用。 让我给你几个用例:

  • 您的应用程序必须从小端机器(x86、intel/amd)与大端机器(sparc/powerpc)进行通信。您的消息传递系统有一些字节序假设:去修复它
  • 您设计的应用程序不是二进制协议(protocol)/消息传递系统,但现在它非常慢,因为您花费了大部分时间来解析它(消息数量增加并且解析成为瓶颈):对其进行调整,以便它可以传输二进制/固定编码
  • 一开始,您在一个局域网内有 3 台机器,所有内容到达每台机器时没有明显的延迟。您的客户/老板/pointy-haired-devil-boss 出现并告诉您将在您不管理的 WAN 上安装该应用程序 - 然后您开始出现连接失败、延迟时间过长等问题。您需要存储消息并重试发送稍后:返回代码并将这些东西插入(并享受)

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

  • 某些消息至关重要,并且接收/发送需要适当的备份/持久性。你为什么问 ?审计目的

还有许多我忘记的其他用例......

您可以自己实现它,但不要花太多时间这样做:无论如何您稍后可能会替换它。

关于rabbitmq - 为什么使用 AMQP/ZeroMQ/RabbitMQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1823705/

相关文章:

java - JMS 消息传递性能 : Lots of Topics/Queues vs. 广泛过滤(消息选择器)

c++ - ZeroMQ:如何在 Windows 上处理 Ctrl-C

zeromq - 无回复请求的 ZMQ 模式

python - Zeromq:不允许使用 unicode,请使用 send_unicode

java - RabbitMQ Java 客户端到 Windows 服务总线

java - 将来自 RabbitMQ 的消息转换为字符串/json

jms - 何时将持久性与 Java 消息传递和队列系统结合使用

jms - 当今可扩展的大型站点使用何种消息传递架构?

apache-camel - Camel RabbitMQ 确认

java - RabbitMQ 使用 Spring 直接回复的问题