JMS消息机制主要分为两种模型:PTP模型和Pub/Sub模型。
PTP模型:(Point to Point 对点模型) 每一个消息传递给一个消息消费者,保证消息传递给消息消费者,且消息不会同时被多个消费者接收。如果消息消费者暂时不在连接范围内,JMS会自动保证消息不会丢失,直到消息消费者进入连接,消息将自动送达。因此,JMS需要将消息保存到永久性介质上,例如数据库或者文件。
Pub-Sub模型:(publish-subscription 发布者订阅者模型)每个主题可以拥有多个订阅者。JMS系统负责将消息的副本传给该主题的每个订阅者。
如果希望每一条消息都能够被处理,那么应该使用PTP消息模型。如果并不要求消息都必须被消息消费者接收到的情况下,可使用pub-sub消息模型。Pub-Sub模型可以在一对多的消息广播时使用。
PTP和Pub-Sub编程模型示意图:
在JMS1.1版本中,为两种消息模型提供了统一的编程接口,即处理PTP消息模型的程序代码与处理Pub-Sub消息模型的程序代码差异不是很大,JMS客户端代码直接使用JMS1.1提供的API编程即可,至于底层究竟是使用哪种编程模型,客户端并不关心,也几乎没有任何区别。
JMS统一编程模型:
JMS1.1 API说明:
ConnectionFactory:连接工厂,JMS客户端使用JNDI查找、定位连接工厂
Connection:JMS连接,由连接工厂创建。表示客户机与服务器之间的活动连接
Session:JMS会话,由连接工厂创建。表示客户机与JMS服务器之间的通信状态
Queue:JMS消息目的地,消息生产者发送消息的目的地,消息消费者获取消息的消息源
MessageProducer:消息生产者,负责创建、发送消息
MessageConsumer:消息消费者,负责接收并读取消息
消息生产者发送消息:
1. 通过JNDI查找来获取ConnectionFactory
2. 通过ConnectionFactory创建Connection
3. 通过Connection创建Session
4. 通过Session创建MessageProducer
5. 通过Session创建空的JMS消息
6. JMS消息填充消息内容
7. 通过JNDI查找获取JMS消息的目的地
8. MessageProducer发送消息
9. 关闭JMS资源
这些是有JMS API提供,这几步的实现在下篇的MDB实例中会有代码。