【问题标题】:What's the difference between MQ(RabbitMQ,ActiveMQ...) and network library(ACE, Asio, libevent...)?MQ(RabbitMQ,ActiveMQ...) 和网络库(ACE, Asio, libevent...) 有什么区别?
【发布时间】:2020-09-07 14:41:46
【问题描述】:

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

因为我之前没用过MQ,所以除了MQ的很多新特性,我也搞不清楚它们之间的本质区别,也不知道到底应该在什么时候、什么地方用MQ或者只是使用网络库就可以了。

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

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

【问题讨论】:

    标签: rabbitmq network-programming mq libevent ace


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回复,这让我现在更清楚了。
    • 抱歉,我只能将答案标记为已接受。而且你的回答在更高层次上也很有帮助。再次感谢!
    【解决方案2】:

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

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

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

    【讨论】:

    • 感谢您的回复,从您的解释来看,我认为MQ可以在不稳定的网络环境下确保消息的正确性,不是吗?
    • 是的,如果连接到MQ的客户端断开连接,消息仍然在MQ中。
    猜你喜欢
    • 1970-01-01
    • 2015-07-03
    • 2020-07-11
    • 2020-07-11
    • 1970-01-01
    • 2020-06-05
    • 2010-12-05
    • 1970-01-01
    • 2015-03-21
    相关资源
    最近更新 更多