https://stackoverflow.com/a/33888439/156458 说
D-Bus过去不是Linux(即内核)IPC,而是一个额外的IPC。 中间件工控机。但在引进
systemd
的过程中, D-Bus成为几个Linux发行版的一部分 系统。
维基百科说D-BUS是一个"IPC守护进程"。
D-总线算不算
-
消息oriented_middleware,或
-
消息队列?
我听说Zeromq,RabbitMQ,Kafka也是IPC的中间件。 Zeromq、RabbitMQ、Kafka 是否与 D-Bus 处于同一级别(高于 Linux IPC 方法级别)?有些人将ZeroMQ与D-Bus进行了比较,所以我想知道它们是否相互替代?
首先,它有点挑剔,但可能足够相关,值得一提:"D-Bus"是一种协议,通常与消息总线守护程序一起使用(通常dbus-daemon
,但已经编写了其他实现)。可以在没有守护程序的情况下使用该协议(用于同一台计算机上的进程之间的点对点消息传递),也可以通过网络或任何您想要的方式使用。该协议仅定义类型系统、消息结构和调用语义。
对于这个答案的其余部分,我将假设"D-Bus"是指(就像大多数人通常所做的那样)协议和dbus-daemon
的组合。
D-Bus 算不算面向消息的中间件?
有点。维基百科说MOM允许存储,路由或转换消息,以及异步性。D-Bus 实现消息队列(但如果对等方未连接到总线;在这种情况下,错误将返回给发送方),消息的有限路由(广播或单播)并且没有消息转换。异步性由 D-Bus 客户端库与轮询循环相结合提供。
D-Bus 算作消息队列吗?
有点。如上所述,D-Bus 在dbus-daemon
中实现消息的有序排队,直到接收对等方读取它们。如果守护程序重新启动或对等方断开连接,它不会将队列存储在磁盘上。D-Bus 规范定义了 D-Bus 提供的消息排序保证。
D-Bus像ZeroMQ吗?
我不太了解 ZeroMQ,但似乎关键的区别在于 D-Bus 仅适用于本地 IPC,而 ZeroMQ 也针对网络上多台机器之间的 IPC。虽然可以通过TCP运行D-Bus,但这不是官方支持的配置,也不是D-Bus真正设计的目的。