[b]1. JMS接收不到消息,p2p模型中接收不到消息(或是第一次可以正常接收,而之后就无法接收) 主要原因:[/b]
[b]2. 消息的同步异步接收:[/b]
[b]3. 消息的push/pull[/b]
[b]4. Spring JMS[/b]
每执行一次 QueueReceiver receiver = session.createReceiver(queue) 语句,就会创建一个queue队列消息的消费者,如果在一个应用程序中多 次执 行上述语句,就会产生多个消费者,可以在浏览器中输入http://localhost:8161/admin进行查看。而一旦某个队列有多个对应的消费者,那么JMS提供者将消息发送给那个消费者是不确定的!要想准确收到对应的回复消息,需要使用“消息过滤”。
[b]2. 消息的同步异步接收:[/b]
消息的同步接收是指客户端主动去接收消息,JMS 客户端可以采用MessageConsumer 的receive方法去接收下一个消息;消息的异步接收是指当消息到达时,主动通知客户端。JMS 客户端可以通过注册一个实现MessageListener 接口的对象到 MessageConsumer,这样,每当消息到达时,JMS Provider 会调用MessageListener中的onMessage 方法。
[b]3. 消息的push/pull[/b]
QueueReceiver的receive方法从JMS服务器去拉取消息,一次只能取道一条;而如果QueueReceiver设置了一个监听器,一旦有消息,JMS服务器就会将消息推送个QueueReceiver;对于服务器中的消息,如果被发送到某个receiver,而且这个receiver接收到消息后通知服务器,那么这个消息才会被服务器从队列中删除,否则仍然保存在队列中。关于通知的方式就涉及到事务以及消息确认模式等。
[b]4. Spring JMS[/b]
JmsTemplate用于同步发送消息和接收消息; Spring框架通过MDP支持消息的异步接收,在Spring中,配置异步消息侦听器有3中不同的方式:实现javax.jms.MessageListener接口,实现Spring的
SessionAwareMessageListener,以及在Spring的MessageListenerAdapter类中包装一个标准的POJO。