1.1、JMS的基本构件
1.1.1 连接工厂
连接工厂是客户用来创建连接对象的,例如ActiveMQ提供的ActiveMQFactoryConnection
1.1.2 连接
JMS Connection 封装了客户与JMS 提供者(即 JMS provider 即jms服务端)之间的一个虚拟的连接。
1.1.3 会话
JMS Session 是生产和消费的一个单线程上下文。会话用于创建消息生产者(Producer)、消息消费者(Consumer)、消息(Message)等。会话提供了一个事务性的上下文,在这个上下文中一组发送和接收被组合到了一个原子操作中。
1.1.4 目的地
目的地:
客户用来指定它生产的消息的目标和它消费的消息的来源的对象。
1.1.5 消息生产者
由会话对象产生
1.1.6 消息消费者
消息消费者是由会话产生的一个对象,它用于接收发送到目的地的消息。消息的消费分以下两种方式:
1、同步消费,通过调用消费者的receive方法从目的地中显示提取消息。receive可以一直
阻塞直到消息到达(消息的接受者会一直等待,知道有消息达到或者超时)
while (true) {
TextMessage textMessage = (TextMessage) consumer.receive(1000);
if (textMessage != null) {
System.out.println("收到的消息是:" + textMessage.getText());
} else {
break;
}
}
2、异步消费,客户可以为消费者注册一个消息监听器(
MessageListener),以定义在消息到达时候所采取的行动.
consumer.setMessageListener(new MessageListener() {
public void onMessage(Message message) {
TextMessage textMessage = (TextMessage) message;
try {
System.out.println("接收到的文字消息为:" + textMessage.getText());
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
1.1.7 消息(可参考:http://www.cnblogs.com/guthing/archive/2010/06/12/1757158.html)
JMS消息由三部分组成:
1、消息头:每个消息头字段都有一个setter和getter方法
2、消息属性:如果需要除消息头以外的值,那么可以使用消息属性
3、消息体:JMS定义的消息类型有:TextMessage,MapMessage,BytesMessage,StreamMessage,ObjectMessage
1.1.8 消息的传递
消息传递域的两种形式:1、点对点(queue):简单点说,就是一对一的过程,一条消息只能被一个消费者消费
2、发布订阅(topic):类似于邮局发布报纸,凡是订阅了这个topic的消费者,均可以消费