2

我有一个简单的场景,发布者(我的 java 应用程序)在主题上发布消息。50 个客户端订阅了同一个 JMS 主题。一旦在主题上发布消息,所有 50 个订阅者都会收到通知。假设只有一个订阅者(0ut 0f 50)处理消息并在处理后发送确认。(一旦这个客户端处理完成后,我可以在 apache MQ 控制台上看到该消息已被消费。否则,如果在收到消息后没有客户端发送确认,我会将消息视为待处理消息)。

现在的问题是,一旦任何客户端发送确认并且任何新客户端订阅主题,他会收到有关消息的通知吗?或者它以任何客户端已使用消息的方式工作(这在内部意味着任何客户端已发送确认),不会向任何新订阅者发送进一步的通知,并且将从主题中删除消息(这是我正在经历的行为,但根据http://en.wikipedia.org/wiki/Java_Message_Service下的发布/订阅模型,它看起来不应该以这种方式工作)?

4

1 回答 1

3

我没有使用过 Apache MQ。但总的来说:

在发布/订阅模型中,当消息发布时,所有订阅者都将收到该发布。

订阅者仅向消息传递提供者而非发布者确认。当订阅者确认收到消息时,消息提供者会删除该消息,以便不再传递该消息。

如果在某个主题上发布消息后有新订阅者加入,则订阅者将不会获得该发布。订阅者将收到有关该主题的任何新出版物。像 IBM WebSphere MQ 之类的一些提供程序具有称为“保留发布”的功能,其中缓存了发布的副本。在发布后加入的任何新订阅者都将收到此缓存的发布。保留发布功能在主题发布之间存在时间延迟时很有用,新订阅者将立即获得缓存的发布,而不是等待发布者发布新发布。

于 2012-11-15T04:49:56.230 回答