JMS
较全的资料:http://blog.csdn.net/zhangxs_3/article/category/625599
http://blog.csdn.net/zhangzikui/article/details/24837999
1,http://blog.csdn.net/wl_ldy/article/details/7884475
基本概念:Java Message Service,java消息服务。
支持两种通信模式:
点对点(一对一)-----等到消息接收者(receiver)接收到它,才会从消息队列中删除,没有被接收的消息会一直存在JMS容器里
发布订阅(一对多)。----不是持久的。消息一经发出,不管有没有人接收,都不会保存下来
2,Queue的是点对点的。Topic实现的是发布/订阅模型
ConnectionFactory---->Connection--->Session--->Message
Destination + Session------------------------------------>Producer
Destination + Session------------------------------------>MessageConsumer
ConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost");
Connection connection = factory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Message message = session.createTextMessage("Hello JMS!");
// Queue
Queue queue = new ActiveMQQueue("testQueue");
MessageProducer producer = session.createProducer(queue);
producer.send(message);
MessageConsumer comsumer = session.createConsumer(queue);
Message recvMessage = comsumer.receive();
//Topic
Topic topic= new ActiveMQTopic("testTopic");
MessageProducer producer2 = session.createProducer(topic);
producer2.publish(message);
MessageConsumer comsumer2 = session.createConsumer(topic);
Message recvMessage = comsumer2.receive();
注意:
(1)connection连接用完之后必须记得关闭,否则连接资源不会被释放掉。关闭连接的同时会自动把会话、产生者、消费者都关闭掉。
(2)异步的接收消息,这时我们得用消息临听器(Message Listener)。这样就不会造成消息的阻塞。
3.消息:(StreamMessage,MapMessage--有结构),(TextMessage,ObjectMessage,BytesMessage--无结构)
一个消息对象分为三部分:消息头(Headers),属性(Properties)和消息体(Payload)