MQ(RabbitMQ,ActiveMQ ...)与网络库(ACE,Asio,libevent…)之间有什么区别?

问题描述 投票:0回答:2

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

因为我以前没有使用过MQ,所以请试一下MQ的许多新功能,我无法弄清它们之间的本质区别,也不知道确切地在何时何地使用MQ或只是使用网络库很好。

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

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

rabbitmq network-programming mq libevent ace
2个回答
0
投票

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

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

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


0
投票

消息排队系统(MQ,Qpid,RabbitMQ,Kafka等)是专为可靠,灵活地处理消息而设计的高层系统。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.