我有一个简单的场景,发布者(我的java应用程序)发布了 关于主题的消息。 50个客户已订阅相同的JMS主题。一旦在主题上发布消息,将通知所有50个订户 。只有一个用户(0ut 0f 50)处理该消息并发送确认 处理完毕后(完成此客户端处理后,我可以看到消息已消耗完) 在apache MQ控制台上。否则,如果没有客户端在收到确认后发送确认 消息我将消息视为待处理消息)。
现在问题是任何客户发送确认和任何 新客户订阅主题,他会收到有关消息的通知吗?或者它以消息的方式工作 由任何客户端消费(内部意味着确认已由任何客户发送),不再发出通知 发送到任何新订阅者和消息将从主题中取消(这是我遇到的行为,但看起来像 根据{{3}})下的发布/订阅模型,它不应该以这种方式工作吗?
答案 0 :(得分:3)
我没有使用过Apache MQ。但总的来说:
在发布/订阅模型中,发布消息时,所有订阅者都将收到该发布。
订阅者的确认仅针对消息提供商,而不针对发布者。当订户确认收到消息时,消息提供程序将删除该消息,以便不再发送消息。
如果在主题上发布消息后新订阅者进入,则订阅者将不会获得该发布。订户将收到有关该主题的任何新出版物。 IBM WebSphere MQ等一些提供程序具有一个名为“保留发布”的功能,其中缓存了一个发布的副本。发布后进入的任何新订阅者都将收到此缓存的出版物。当主题的发布之间存在时间延迟时,保留发布功能非常有用,新订阅者将立即获得缓存的发布,而不是等待发布者发布新的发布。