【问题标题】:Why is HTTP not a messaging protocol? (according to RabbitMQ)为什么 HTTP 不是消息传递协议? (根据 RabbitMQ)
【发布时间】:2018-07-28 19:41:30
【问题描述】:

RabbitMQ documentation 中,MQTT、AMQP 和 STOMP 被称为支持的消息协议。如果你考虑the differences between MQTT, AMQP and STOMP,这对我来说是完全可以理解的。 但是,在本文的结尾,它变得令人困惑。那是关于 HTTP 的。本段指出“HTTP 不是一门课程,也不是消息传递协议”。我曾认为 RabbitMQ 也会以一种或另一种方式直接支持 HTTP,但仅支持“低容量消息传递目的”(例如诊断)和直接在 HTML 中使用。 如果世界上有一半人使用 HTTP Web api 服务,为什么 HTTP 不能在消息传递协议之间共享。为什么 HTTP 不是消息传递协议,RabbitMQ 对消息传递协议的定义是什么?

【问题讨论】:

    标签: http rabbitmq amqp stomp


    【解决方案1】:

    HTTP 完全属于同步request-response 协议类别。这与 Message-Oriented Middleware 典型的异步 message passing 协议完全相反。

    将 HTTP 用于 Web api 服务的“半个世界”并不将其用作基于 loose coupled messaging 的 Web API 服务,而是用作基于紧密耦合的请求-响应的 API。

    消息传递协议具有由协议定义和实现提供的某些特性(至少一次、精确一次、最多一次、按顺序精确一次等)。尝试通过 HTTP 进行 消息传递 很快就会转变为在 HTTP 之上 层复制这些要求(重试、序列号、重复处理等),并将 HTTP 弃用到提供从消息传递的角度来看价值不大。

    【讨论】:

    • 感谢您的回答。我正在寻找的分类同步请求响应与异步消息传递协议。我可以简单地说 HTTP 是一个发送者和一个接收者之间的同步通信,而 messaging 是一个发送者和一个或多个接收者之间的异步通信,其中双方的代理或堆栈提供排队等机制,确认,超时......在协议之上?
    • 从协议的角度来看,它们是不同的。 HTTP 经常(尽管不总是)为服务器的每个连续请求创建一个新的 TCP 连接,并且它有自己的握手等。例如,AMQP 在实际协议(位/字节)级别以及如何它管理套接字。这就是为什么你会在防火墙方面遇到困难的原因之一。
    • @CoffeCold 对,消息传递产品将处理本地存储(排队)和开箱即用的重试/可靠性。说到防火墙,它们是有时使用 HTTP/S 作为高层消息协议的传输协议的原因。出站 HTTP/S 连接无处不在。
    猜你喜欢
    • 2015-11-27
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    相关资源
    最近更新 更多