我没有太多的套接字编程经验,但我试着读了一点。我对 MDB 和消息队列非常熟悉。有人告诉我,队列(例如 MDB)“只不过是直接套接字连接”。谁能帮我比较一下这两个。
2 回答
两者是无与伦比的,因为它们代表不同的层次。这就像将关系数据库与磁盘上的文件进行比较或将房屋与砖块进行比较(即,当然您需要文件来构建数据库和砖块来建造房屋,有时您只需要一个文件或一块砖头,但这并不使它们具有可比性)。
消息队列是一种将发送者和接收者粘合在一起的软件,这样他们就可以在不了解彼此的情况下进行通信(当然,他们都需要了解队列)并且不需要实现网络代码、处理故障、路由一个消息发送到许多接收者等。即使发送者和接收者从不同时处于活动状态,系统也能正常工作,因为队列还可以作为未传递消息的临时存储。除此之外,队列还可以提供额外的服务,比如授权、交易等。
套接字连接是一种低级网络抽象,它说:“目前两个程序可以通过网络相互发送数据,至少在连接由于某种原因中断之前”。所以是的,通常消息队列将使用套接字连接在网络上工作。
顺便说一句:您提到的MDB(消息驱动Bean)不是消息队列(就像JDBC不是数据库一样)。它是一个用于消费事务性消息的 API。他们可能来自队列,但他们不必这样做。
两者在某种意义上是完全不同的;
套接字允许在同时认识自己的客户端之间建立连接(例如,在客户端和后端服务之间或在后端服务之间)。
消息队列主要充当消息驱动系统中不同后端服务之间的接口。除了消息代理(例如,rabbitMQ、activeMQ、Kafka)之外,服务不需要知道它们正在与谁通信。这确保即使其中一项服务关闭,消息也不会丢失。服务启动后,消息代理立即将消息发送给消费者。