而不是写你自己的图书馆。

我们正在一个项目,在这里,这将是一个自我分割服务器的游泳池,如果其中一个部分的增长过重,经理会除它,并把它放在另一台计算机作为一个单独的进程。它还将提醒所有连接的客户,这将影响到连接到新的服务器。

我很好奇有关使用ZeroMQ用于服务器间和进程间的通信。我的伙伴愿意卷他自己的。我找到的社会回答这个问题。

我是一个相当新的程序员自己以及刚刚得知有关消息的队列。正如我已经google搜索和阅读,它似乎每个人都是采用邮件队列为各种各样的事情,但为什么?什么使得他们更好写你自己的图书馆?他们为什么如此共同的和为什么有这么多?

有帮助吗?

解决方案

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

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

这些工具是 非常 有用 第一个版本,当您实际上必须扩展应用程序并为其添加更多功能时。让我给你几个用例:

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

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

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

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

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

其他提示

这非常像问:为什么要使用一个数据库时,你可以编写自己的

答案是,使用一种工具,它已经存在了一段时间,在很多不同的使用情况很好理解,回报越来越多随着时间的推移和您的需求的发展。如果一个以上的开发者参与项目尤其如此。你想,如果你切换到新的项目,成为支持人员的排队系统?使用工具可以防止这种情况的发生。它成为别人的问题。

案例:持久性。写一个工具来存储一个消息在磁盘上很容易。编写扩展,并执行阱persistor 稳定地,在许多不同的使用情况,并且是可管理的,并且便宜的支持,是困难的。如果你想看到有人抱怨是多么困难,再看看这个:的 http://www.lshift.net/blog/2009/12/07/rabbitmq-at-the-skills-matter-functional-programming-exchange

无论如何,我希望这会有所帮助。通过一切手段写自己的工具。很多很多人都这样做。无论解决您的问题,是不错的。

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

让我们假设那一刻你有能力来实现一个消息队系统,以满足所有的要求。为什么你会采取ZeroMQ(或其他第三方的图书馆)的滚你自己的方法?简单的成本。

让我们假设一下ZeroMQ已经满足所有的要求。所有需要做的是把它变成你的建立,阅读一些doco然后开始使用它。这是有远远较少的精力于自己.另外,维护的负担已经转移到另一家公司。由于ZeroMQ是免费的,这就像你刚刚长大你的发展的团队包括(一部分)ZeroMQ队。

如果你跑了一个软件开发业务,那么我认为你会平衡的成本/风险,使用第三方的库对自己,并且在这种情况下,使用ZeroMQ会赢得手了。

也许你(或者说你的合伙人)受到影响,因为许多开发,从 "没有发明在这里" 综合症?如果这样,调整你的态度和重新评估使用的ZeroMQ.就个人而言,我更喜欢的好处的自豪地在其他地方发现的态度。我希望我可以自豪地找到ZeroMQ...时间会告诉我们。

编辑:我遇到了这个 视频 从ZeroMQ开发商谈 为什么 你应该使用ZeroMQ.

  

是什么让他们比写自己的库比较好?

消息排队系统是事务性的,这是概念性容易作为客户端使用,但很难得到正确作为实现者,特别是考虑到持久队列。你可能会认为你可以逃脱简单写短信库,但没有交易和持久性,你会不会有消息系统的全部好处。

持久性在此上下文中意味着,消息传送中间件保持未处理的情况下,在永久存储的消息(在磁盘上)的服务器停机;重新启动后,该消息可以被处理,并没有重传是必要的(发送者甚至不知道有问题)。交易意味着你可以读取不同的队列中的消息和事务的方式写邮件到不同的队列,这意味着要么所有的读取和写入成功或者(如果一个或多个失败)没有成功。这不是来自与数据库的接口称为事务性确实非常不同,并且具有相同的利益(它简化了错误处理;如果没有交易,你就必须保证每个单独的读/写成功,如果一个或多个失败,你有回滚那些确实成功的变化)。

在写自己的图书馆,阅读0MQ指南这里: http://zguide.zeromq.org/页:所有

有机会,你要么决定安装RabbitMQ的,否则你会做出ZeroMQ的顶部您的图书馆,因为他们已经做了所有困难的部分。

如果你有一点点时间给它一个尝试,并推出自己的实现!这个练习所学的知识会说服您是否要使用已经测试库的智慧。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top