繁体   English   中英

MQ(RabbitMQ,ActiveMQ...) 和网络库(ACE, Asio, libevent...) 有什么区别?

[英]What's the difference between MQ(RabbitMQ,ActiveMQ…) and network library(ACE, Asio, libevent…)?

目前,我们计划升级我们的产品以使用 MQ(RabbitMQ 或 ActiveMQ)在服务器和客户端之间进行消息传输。 现在我们正在使用网络 lib(evpp) 来执行此操作。

因为之前没用过MQ,所以除了MQ的很多新特性,我也搞不清它们的本质区别,也不知道具体什么时候、什么地方用MQ还是只用网络库很好。

而我们要使用MQ的目的,就是要解决通信的不可靠,比如消息丢失或者其他网络环境不稳定导致的问题。

希望有熟悉他们两个的人可以释放我的困惑。 感谢提前。

消息队列系统(MQ、Qpid、RabbitMQ、Kafka 等)是专为可靠、灵活地处理消息而构建的高层系统。

网络编程库/框架(ACE、asio 等)是构建消息队列(和许多其他类型)系统的有用工具。

请注意,对于 ACE,它不仅仅包含网络,您可以使用像上面这样的消息队列系统,并使用一个程序驱动它,该程序也使用 ACE 的类进行线程管理、操作系统抽象、事件处理等。

就像在任何网络编程中一样,当客户端向服务器发送请求时,服务器会做出响应。 但要做到这一点,必须满足以下条件

  1. 服务器必须已启动并正在运行
  2. 客户端应该能够在它们之间建立某种连接
  3. 当服务器向客户端发送响应时,连接不应中断,反之亦然

但是在消息队列的情况下,无论服务器想告诉客户端什么,消息都被放置在消息队列中,即单独的服务器/实例中。 客户端监听消息队列并处理消息。 在来自客户端的肯定确认后,该消息将从消息队列中删除。 显然,服务器必须建立连接才能将消息推送到消息队列实例。 即使客户端关闭,消息也会保留在队列中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM