第3.3 案例2: 工作队列 job queue
第2个案例就是工作队列,典型的点对点的消息,一个Producer发送一个工作消息到队列去,具有Listener类的Consumer能够从工作队列中获得一个工作情况的消息,这个消息被这个消费者消费掉之后,就不存在了,隶属于一点对一点模式,这不同于3.2案例中的股票期货那样可以把一个价格发布到多个订阅了的消费者身上。
还有一点不同:Producer使用消息生产者发送了100个消息进入队列后,就马上关闭连接了,这一点同3.2一样。此后,这10个消息仍旧存在于JMS服务器消息域中,随后的消费者什么时候运行就什么时候来消费掉这些消息,不用一直在线等,该队列中的消息也不会逝去。这也是不同于3.2案例的地方。
启动步骤:
1、 启动ActiveMQ。
2、 首先要运行的是Producer类。
3、 在运行Consumer类。
需要说明的一点是:
1、这次谁先启动都无所谓,因为在消息会在队列里暂时存储一段时间,谁先启动都无关紧要,这一点我已经证实多次了,而且,消费者所获得的消费消息也会完整无缺,一个也不缺。
2、关于“点对点”模式的说明,具体来讲应该是“消息点对点”。如果理解为一个生产者和一个消费者,那这样是理解错误的,应该是一个生产者发出消息只能有被一个消费者所消费后,其他的消费者是得不到的,因为该条消息是一次性的,进入队列后在从队列中,在队列中什么也没有发生变化,而且队列形象的象个直通子的容器,只是让这条消息在里面呆了一阵子而已,无它。
这是我理解下的消息点对点模式图:
附件:程序的运行结果: