【发布时间】:2012-11-08 00:41:51
【问题描述】:
我很难理解持久订阅。我知道,当侦听器将自己注册为主题的持久订阅者时,它会告诉 JMS-“嘿,我是持久订阅者,从现在开始,如果我不在那里,您需要将所有消息存储在主题中并将这些消息传递给我等我回来”
现在,如果是这样,为什么两个订阅者不能请求这个持久订阅?
我错过了什么吗?
【问题讨论】:
标签: java jakarta-ee jms messaging
我很难理解持久订阅。我知道,当侦听器将自己注册为主题的持久订阅者时,它会告诉 JMS-“嘿,我是持久订阅者,从现在开始,如果我不在那里,您需要将所有消息存储在主题中并将这些消息传递给我等我回来”
现在,如果是这样,为什么两个订阅者不能请求这个持久订阅?
我错过了什么吗?
【问题讨论】:
标签: java jakarta-ee jms messaging
持久订阅者通过指定一个持久订阅来注册一个持久订阅 JMS 提供者保留的唯一身份。随后的 具有相同标识的订阅者对象恢复订阅 处于前一个订户留下的状态。如果一个 持久订阅没有活动订阅者,JMS 提供者 保留订阅的消息,直到它们被 订阅或直到它们过期。
为了使持久订阅适用于 1 个持久订阅的多个订阅者,代理必须存储从主题(由第一个订阅者创建)到其到期的每条单独消息,即如果没有消息 TTL 可能永远存储指定,因为在任何时间点,新订阅者都可以弹出并声明它“错过”的所有消息(即,自创建订阅以来的所有消息)。这是不可行的。
我可能在这里忽略了要点,但我看不出让多个同时订阅者共享一个订阅比定义两个单独的订阅更实用?
【讨论】:
对 Duplicate Durable Subscription 的理解是错误的。
持久订阅并不意味着没有多个订阅者可以订阅。这意味着没有一个订阅者可以有两个不同的持久标识符。
【讨论】: