RabbitMQ 是否用于进程间通信,如管道和命名管道? RabbitMQ 与命名管道相比如何?分布式系统除外。
(RabbitMQ对于那些没有遇到过它的人来说,它是一个使用 AMQP 的开源中间件企业消息代理。)
答案1
RabbitMQ 是否用于进程间通信,如管道和命名管道?
不。这不是理解 RabbitMQ 或一般基于消息传递代理的中间件的最佳方式。
如果您正在寻找一个范例来开始理解 RabbitMQ 及其同类产品,那么根本不要考虑低级 IPC。
想想 Unix 邮件。
- 程序生成消息。
- 它们有标题和正文。
- 他们甚至有(可选)消息 ID、MIME 内容类型、时间戳和回复地址。
- 他们被发送给经纪人。
- 代理对它们进行路由,并根据路由拓扑将它们放入队列中,其他程序从中检索它们。
- 有扇出交换它创建要发送的消息的多个副本。
- 甚至还有死信箱。
当然,一旦了解了细节,它就不完全是邮件了。
- 路由拓扑受客户端程序控制,使用与发送和接收消息相同的客户端-服务器协议。
- DNS 很大程度上不参与其中。
- 它不是存储转发。
- 扇出交换仅非常粗略地就像邮件列表一样。
- 客户端程序可以使用该协议来清除队列(https://askubuntu.com/a/707523/43344)并设置消息的 TTL。
- 持久性和持久性有不同程度。
- 消息的接收可能涉及握手,积极的和消极的, 和以编程方式强制重新传递。
- 有用于控制哪些客户端对基础设施的哪些部分具有哪些访问权限的安全范例,允许管理员(例如)限制使用用户凭据“JdeBP”登录的客户端可以将消息发送到的位置。
不过邮寄是个好办法第一次近似无论如何,为了理解这些概念,比从 IPC 或 RPC 子系统进行比较要好得多。