我没有太多的套接字编程经验,但我尝试了解了一些相关知识。我比较熟悉 MDB 和消息队列。有人告诉我队列(例如 MDB)与直接套接字连接相差不大。请问有人能够为我比较这两个概念吗?
我没有太多的套接字编程经验,但我尝试了解了一些相关知识。我比较熟悉 MDB 和消息队列。有人告诉我队列(例如 MDB)与直接套接字连接相差不大。请问有人能够为我比较这两个概念吗?
这两者是无法比较的,因为它们代表不同的层次。就像将关系数据库与磁盘上的文件或将房子与砖块进行比较(即使构建数据库需要文件和建造房屋需要砖块,有时您只需要一个文件或一个砖块,但这并不能使它们可比)。
消息队列是一种软件,将发送方和接收方粘合在一起,使它们可以相互通信,而无需彼此了解太多(当然,它们都需要知道队列),也不需要实现网络代码、处理失败、将一个消息路由到许多接收者等。即使发送方和接收方从未同时处于活动状态,系统也能正常工作,因为队列还可用作未投递消息的临时存储。除此之外,队列可以提供其他服务,如授权、事务等。
套接字连接是低级网络抽象,表示“当前两个程序可以彼此在网络上发送数据,至少直至某些原因断开连接”。因此,通常情况下,消息队列将使用套接字连接在网络上工作。
顺便说一下:您提到的MDB(Message Driven Bean)不是消息队列(就像JDBC不是数据库)。它是用于消费事务性消息的API。它们可以来自队列,但不一定。
二者在以下方面有着完全不同的含义;
套接字(Socket)允许已知彼此的客户端之间建立连接(例如,客户端和后端服务或后端服务之间等)。
消息队列主要作为消息驱动系统中不同后端服务之间的接口。这些服务无需知道它们正在与谁通信,除了消息代理(Message broker) (例如,rabbitMQ,activeMQ,Kafka)。这确保即使其中一个服务停机,消息也不会丢失。一旦服务重新启动,消息代理将消息发送给消费者。