【问题标题】:Is D-Bus a middleware IPC?D-Bus 是中间件 IPC 吗?
【发布时间】:2019-06-01 05:03:40
【问题描述】:

https://stackoverflow.com/a/33888439/156458

D-Bus 以前不是 Linux(即内核)IPC,而是一个附加的 中间件 IPC。但是在systemd的介绍过程中, D-Bus 成为几个 Linux 发行版的基本组成部分 系统。

Wikipedia 说 D-BUS 是“IPC 守护进程”。

D-Bus算不算

我听说 Zeromq、RabbitMQ、Kafka 也是用于 IPC 目的的中间件。 Zeromq、RabbitMQ、Kafka 是否提供与 D-Bus 相同级别(高于 Linux IPC 方法级别)? Some 将 ZeroMQ 与 D-Bus 进行了比较,所以我想知道它们是否可以相互替代?

【问题讨论】:

  • Imo dbus 两者兼而有之。为什么它应该是系统的一部分对我来说是个谜,但是整个 systemd 堆栈从来都不是由系统管理员编写的合理解决方案
  • 垃圾 systemd 在这里是题外话。
  • 还要注意 D-Bus 和 systemd 是完全独立的项目。 D-Bus 自 2003 年就出现了,而 systemd 于 2010 年首次发布。 systemd 依赖于 D-Bus; D-Bus 有一些系统集成,但不依赖于它。人们使用 D-Bus 是因为它显然解决了他们在使用其他 IPC 机制时遇到的问题(例如缺少进程寻址或标准消息格式和类型系统)。

标签: linux ipc message-queue dbus


【解决方案1】:

首先,它有点挑剔,但可能足以提及:“D-Bus”是一种通常与消息总线守护程序一起使用的协议(通常是dbus-daemon,但已经编写了其他实现)。可以在没有守护程序的情况下使用该协议(用于同一台机器上的进程之间的对等消息传递)或通过网络或任何您想要的协议。该协议只定义了类型系统、消息结构和调用语义。

对于这个答案的其余部分,我假设您所说的“D-Bus”是指(正如大多数人通常所做的那样)协议和 dbus-daemon 的组合。

D-Bus 算不算面向消息的中间件?

有点。维基百科说 MOM 允许存储、路由或转换消息以及异步性。 D-Bus 实现消息队列(但如果对等点未连接到总线,则不会;在这种情况下会向发送者返回错误)、消息的有限路由(广播或单播)以及不转换消息。异步性由 D-Bus 客户端库与轮询循环结合提供。

D-Bus 算作消息队列吗?

有点。如上所述,D-Bus 在dbus-daemon 中实现消息的有序排队,直到接收对等方读取它们。如果守护程序重新启动或对等方断开连接,它不会将队列存储在磁盘上。 D-Bus specification 定义了 D-Bus 做出的消息排序保证。

D-Bus 像 ZeroMQ 吗?

我不太了解 ZeroMQ,但似乎关键区别在于 D-Bus 仅用于本地 IPC,而 ZeroMQ 还针对网络上多台机器之间的 IPC。虽然可以通过 TCP 运行 D-Bus,但这不是官方支持的配置,也不是 D-Bus 的真正设计目的。

【讨论】:

    猜你喜欢
    • 2017-04-04
    • 2010-12-01
    • 2011-12-08
    • 2011-10-29
    • 2019-10-05
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 2017-06-28
    相关资源
    最近更新 更多