理解JMS规范中的持久订阅和非持久订阅

JMS 1.1规范定义了持久订阅和非持久订阅,用学生听讲的例子来比喻,非持久订阅如学生在教室则接收到消息,不在则错过。持久订阅则确保即使消费者离线,消息也会被存储并待其上线后推送给他们。实现机制涉及到消息提供者如何处理在线和离线消费者的消息传递。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

jms1.1规范针对publisher/subscriber模型提出了持久订阅和非持久订阅者。我们用现实生活中的例子来说明,持久订阅和非持久订阅的区别。

1.非持久订阅

   考虑学生听老师讲课的情景,大学老师讲课,一部分学生会去教室听课,另一部分学生会选择逃课在寝室睡觉。开始上课前,老师可能会点名,在教室听课的同学知道这个消息,逃课的同学就不知道这个消息(除非朋友电话通知的情况)。即老师发布消息的时候,如果学生在教室就能知道,不在教室就不知道。非持久订阅只有当客户端处于激活状态,也就是和JMS Provider 保持连接状态才能收到发送到某个主题的消息,而当客户端处于离线状态,这个时间段发到主题的消息将会丢失,永远不会收到。在我们的例子中,教室是jms provider和主题,老师是消息发送者,学生是消息接受者。客户端处于激活状态,就相当与学生在教室中。创建非持久订阅者的代码如下:

TopicConnection connection = JmsUtils.getConnection();
Topic topic = JmsUtils.getTopic();
		
TopicSession session = connection.createTopicSession(false,Session.AUTO_ACKNOWLEDGE);

TopicSubscriber subscriber = sess
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值