Mad*_*ara 4 jms stomp message-queue amqp rabbitmq
这是在一次采访中问我的。
上午 10 点在没有订阅者的队列上发布消息时会发生什么?并且具有适当过滤器的订阅者在上午 10.02 订阅同一个队列。当消息到达代理后订阅者订阅时,消息是否会被传递(我的意思是它是否存储在内存中直到找到订阅者)?什么是默认行为?JMS、STOMP 和 AMQP 标准也不同吗?
在AMQP代理中,消息要么传递给订阅队列的消费者,要么在消费者按需从队列中获取/拉取消息时传递。即使此时没有订阅者处于活动状态,消息也会默认保留在队列中。如果消息是持久消息,则消息将存储在磁盘上,如果不是持久消息,则将存储在内存中。https://www.rabbitmq.com/tutorials/amqp-concepts.html
STOMP:RabbitMQ STOMP 适配器支持多种不同的目标类型。当没有订阅者存在时发送的消息将被排队,直到订阅者连接到队列(而当没有连接的订阅者时,主题将丢弃消息)。https://www.rabbitmq.com/stomp.html
JMS:JMS 是一个 API,它不使用任何协议。另一方面,AMQP 是消息客户端和消息服务器之间的协议。JMS 客户端可以使用 AMQP 作为协议与消息传递服务器进行通信。(有关该主题的更多信息,请查看本文https://spring.io/understanding/AMQP)
但是,发送到队列的消息将保留在队列中,直到该队列的消息使用者使用它们。 http://docs.oracle.com/javaee/6/tutorial/doc/bnceh.html和 https://en.wikipedia.org/wiki/Java_Message_Service