Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rabbitmq 当消息在没有订阅者的队列上发布时会发生什么情况?_Rabbitmq_Jms_Message Queue_Amqp_Stomp - Fatal编程技术网

Rabbitmq 当消息在没有订阅者的队列上发布时会发生什么情况?

Rabbitmq 当消息在没有订阅者的队列上发布时会发生什么情况?,rabbitmq,jms,message-queue,amqp,stomp,Rabbitmq,Jms,Message Queue,Amqp,Stomp,这是在一次采访中问我的 上午10点在没有订户的队列上发布消息时会发生什么情况?并且,具有适当筛选器的订户在上午10时02分订阅同一队列。当订阅者在消息到达代理后订阅时,消息是否会被传递(我的意思是,在找到订阅者之前,它是否会存储在内存中)?什么是默认行为?在JMS、STOMP和AMQP标准中也是不同的吗?在AMQP代理中,消息要么传递给订阅队列的消费者,要么在消费者根据需要从队列中获取/拉取消息时传递。默认情况下,即使此时没有任何订阅服务器处于活动状态,消息也将保留在队列中。如果消息是持久消息,

这是在一次采访中问我的


上午10点在没有订户的队列上发布消息时会发生什么情况?并且,具有适当筛选器的订户在上午10时02分订阅同一队列。当订阅者在消息到达代理后订阅时,消息是否会被传递(我的意思是,在找到订阅者之前,它是否会存储在内存中)?什么是默认行为?在JMS、STOMP和AMQP标准中也是不同的吗?

AMQP代理中,消息要么传递给订阅队列的消费者,要么在消费者根据需要从队列中获取/拉取消息时传递。默认情况下,即使此时没有任何订阅服务器处于活动状态,消息也将保留在队列中。如果消息是持久消息,则将其存储在磁盘上;如果消息不是持久消息,则将其存储在内存中

STOMP:RabbitMQ STOMP适配器支持多种不同的目标类型。当不存在订阅服务器时发送的消息将排队,直到订阅服务器连接到队列为止(而当没有连接的订阅服务器时,主题将丢弃消息)

JMS: JMS是一个API,它不使用任何协议。另一方面,AMQP是消息传递客户端和消息传递服务器之间的协议。JMS客户机可以使用AMQP作为与消息传递服务器通信的协议。(有关该主题的更多信息,请查看本文)

但是,发送到队列的消息将保留在队列中,直到该队列的消息使用者使用它们。 和

正如问题所提到的发布者和订阅者,我认为问题在于发布-订阅消息模式。在发布/订阅模式中,发布是针对主题而不是队列进行的

该行为取决于消息传递提供程序。如果没有订户,消息传递提供程序可以放弃发布。因此,如果消息在上午10点发布到某个主题,则该发布将被丢弃,因为没有订阅者。现在,当新订户在上午10:02到达时,出版物将不会送达订户

IBM MQ中有一个“保留发布”的概念。当发布设置了“Retain publication”属性时,IBM MQ队列管理器将为主题保留此类发布的副本,直到为同一主题创建新发布为止。假设在上午10点发布带有“保留发布”的发布,当订阅者在上午10:02到达时,订阅者将获得该发布


希望这有帮助。

同意,消息可能会发布到主题或交换等。但他说:“当消息发布在队列上时”-我假设消息已通过交易所传递并已成功到达队列。在队列目标上找到此消息最多可将每个消息传递给一个订阅者。当不存在订户时发送的消息将排队,直到订户连接到队列。