Sockets 消息队列与套接字

Sockets 消息队列与套接字,sockets,websocket,message-queue,message-driven-bean,Sockets,Websocket,Message Queue,Message Driven Bean,我没有太多的套接字编程经验,但我试着读了一些关于它的书。我非常熟悉MDB和消息队列。有人告诉我,队列(例如MDB)“只不过是一个直接的套接字连接”。有人能帮我比较一下这两个吗 这两者是不可比较的,因为它们代表不同的层次。这就像将关系数据库与磁盘上的文件进行比较,或将房屋与砖块进行比较(也就是说,当然,您需要文件来构建数据库,砖块来构建房屋,有时您只需要一个文件或砖块,但这并不能使它们具有可比性) 消息队列是一种将发送者和接收者粘合在一起的软件,这样他们就可以在不太了解对方的情况下进行通信(当然,

我没有太多的套接字编程经验,但我试着读了一些关于它的书。我非常熟悉MDB和消息队列。有人告诉我,队列(例如MDB)“只不过是一个直接的套接字连接”。有人能帮我比较一下这两个吗

这两者是不可比较的,因为它们代表不同的层次。这就像将关系数据库与磁盘上的文件进行比较,或将房屋与砖块进行比较(也就是说,当然,您需要文件来构建数据库,砖块来构建房屋,有时您只需要一个文件或砖块,但这并不能使它们具有可比性)

消息队列是一种将发送者和接收者粘合在一起的软件,这样他们就可以在不太了解对方的情况下进行通信(当然,他们都需要了解队列),并且不需要实现网络代码、处理故障、,将一条消息路由到多个接收者等。即使发送者和接收者从未同时处于活动状态,系统也可以工作,因为队列还可以作为未送达消息的临时存储。除此之外,队列还可以提供其他服务,如授权、事务等

套接字连接是一种低级网络抽象,它表示:“目前,两个程序可以通过网络相互发送数据,至少在连接因某种原因中断之前是这样。”。因此,是的,通常消息队列将使用套接字连接在网络上工作


顺便说一下:您提到的MDB(消息驱动Bean)不是消息队列(就像JDBC不是数据库一样)。它是用于消费事务性消息的API。他们可能来自一个队列,但他们不一定非要来。

从这个意义上说,这两者是完全不同的

  • Socket允许在了解自己的客户端之间建立连接(例如客户端和后端服务之间或后端服务之间)

  • 消息队列主要充当消息驱动系统中不同后端服务之间的接口。除了消息代理(例如,rabbitMQ、activeMQ、Kafka),服务不需要知道与谁通信。这样可以确保即使其中一个服务关闭,消息也不会丢失。服务启动后,MessageBroker立即将消息发送给消费者


  • 哦,好的,谢谢。所以,当有人实际上只使用套接字传输数据时,他们只是让事情变得更加手动和复杂?我的意思是,消息队列只是为了让我们更轻松。就像纯文件上的数据库一样。我认为那个人的意思可能是说,添加的功能没有多少是您无法使用套接字本身实现的&手动编写它们。无论如何,谢谢你的澄清。以下是他对我上述问题的回答:“我们可以使用简单的套接字连接来实现消息传递。优点和缺点:套接字级编码可能更紧凑,并且基于我们的需要。但是,它要求开发人员管理许多软件包中已有的功能。选择取决于许多因素(时间、成本、人才、未来人才)“答案当然是正确的,但也相当笼统。它还包括推出自己的http服务器、数据库、操作系统等。只有当您有非常具体且同时非常有限的要求时(例如,当您的队列必须非常快速和紧凑,但不需要可靠或安全),才可能用自制啤酒替换此类成熟产品。