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进行了比较,所以我想知道它们是否可以彼此替代?
答案 0 :(得分:2)
首先,它有点挑剔,但可能足以提及:“ D-Bus”是通常与消息总线守护程序一起使用的协议(通常为dbus-daemon
,但已编写了其他实现)。可以在没有守护程序的情况下使用该协议(用于在同一台计算机上的进程之间进行对等消息传递),通过网络或任何所需的协议。该协议仅定义类型系统,消息结构和调用语义。
在本回答的其余部分中,我假设使用“ D-Bus”是指(与大多数人一样)协议和dbus-daemon
的组合。
D-Bus是否算作面向消息的中间件?
排序。维基百科说,MOM允许存储,路由或转换消息以及异步性。 D-Bus实现消息排队(但如果对等点未连接到总线则不执行;在这种情况下,将错误返回给发送方),消息的路由有限(广播或单播),并且不进行消息转换。 D-Bus客户端库与轮询循环一起提供了异步性。
D总线是否算作消息队列?
排序。如上所述,D-Bus在dbus-daemon
中实现消息的有序排队,直到接收方读取它们为止。如果守护程序重新启动或对等方断开连接,则不会在磁盘上存储队列。 D-Bus specification定义了D-Bus提供的消息顺序保证。
D-Bus是否像ZeroMQ?
我对ZeroMQ不太了解,但是似乎关键的区别在于D-Bus仅用于本地IPC,而ZeroMQ也针对网络上多台计算机之间的IPC。虽然可以通过TCP运行D-Bus,但这不是官方支持的配置,也不是D-Bus真正设计的目的。