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 = session.createSubscriber(topic,null,true); 

                  
                  
                  
                  
JMS 1.1规范定义了持久订阅和非持久订阅,用学生听讲的例子来比喻,非持久订阅如学生在教室则接收到消息,不在则错过。持久订阅则确保即使消费者离线,消息也会被存储并待其上线后推送给他们。实现机制涉及到消息提供者如何处理在线和离线消费者的消息传递。
          
最低0.47元/天 解锁文章
                          
                      
      
          
                
                
                
                
              
                
                
                
                
                
              
                
                
              
            
                  
					5980
					
被折叠的  条评论
		 为什么被折叠?
		 
		 
		
    
  
    
  
            


            