JMS的学习总结Ⅰ
JMS的概念直观的理解就是两方子系统通过一个约定的中间系统和一套约定的规则实现数据通信。
- JMS就是这种场景的一个解决方案,它定义了两边子系统与中间系统的通信协议规则,基于这个规则就分出了一些JMS的概念:
JMS客户端,直观的理解就是基于Java体系下的系统
非JMS客户端,这里直观的理解就是非Java体系下的异构系统
JMS 消息,由JMS客户端发给JMS服务的消息概念的抽象,内容包括目的地、不同格式的内容等
JMS 服务,基于JMS规则实现了JMS消息的管理,包括消息的分发、队列的维护、事务的支持等
JMS 公用管理对象,约定JMS客户端必须使用此类对象建立与JMS服务的关联,此类对象会放到JNDI服务上
- 跨平台是如何实现的呢?
因为JMS公用管理对象的概念,它抽象和管理着对JMS服务提供者的具体连接,基于JMS规范有一组统一的接口供JMS客户端调用,这里涉及到有JNDI服务规范的概念。
示例图
- JMS两种消息传播模式和一个消息域的概念
JMS定义的两种传播模式这种概念在事件模式中也会有体现,对某个事件订阅时有时就会要求只有一个事件监听器,而更加常见的就是多个监听器的场景,但这只是概念上是相通的,实现和细节上总归还是有区别的。
点对点模式(Point to Point)
图示
需要看到ClientA发的Msg1只有ClientC会收到而ClientD是不会收到。
发布订阅(Pub/Sub)
这种模式很常见,一方发起消息多方都会收到消息。
消息域的概念
是同步还是异步
- 同步消费者显式调用方法来获取消息
- 异步消费者会有回调方法来处理消息
基于JMS抽象的消息概念,每个消息域都有定义了自己概念的接口
JMS Common Interfaces | PTP-specific Interfaces | Pub/Sub-specific Interfaces |
ConnectionFactory | QueueConnectionFactory | TopicConnectionFactory |
Connection | QueueConnection | TopicConnection |
Destination | Queue | Topic |
Session | QueueSession | TopicSession |
MessageProducer | QueueSender | TopicPublisher |
MessageConsumer | QueueReceiver QueueBrowser | TopicSubScriber |
ConnectionFactory | 被管理对象,用来创建一个连接由客户端使用 |
Connection | 一个到JMS消息系统提供者的活动连接 |
Destination | 一个被管理对象,封装消息目的地的标识 |
Session | 用来发送和接收消息的单独的线程上下文 |
MessageProducer | 由Session对象创建,负责发送消息到目的地的对象 |
MessageConsumer | 由Session对象创建,负责接收消息来自某个目的地 |
非常重要的一个图例,描述了上述接口的关系
- 应用JMS开发的部署
- JMS与线程
JMS对象 | 是/否支持并发 |
Destination | 是 |
ConnectionFactory | 是 |
Connection | 是 |
Session | 否 |
MessageProducer | 否 |
MessageConsumer | 否 |
- 总结
这部分内容主要是对JMS的概念、基本结构内容和应用开发流程进行了描述。
重要术语
JMS客户端、被管理对象、JMS服务、消息、消息生产者、消息消费者、JNDI、ConnectionFactory、Destination、Connection、Session、MessageProducer、MessageConsumer、消息域、Pub/Sub、Point to Point、同步消费者、异步消费者
- 参考资料
- jms_tutorial-1_3_1.pdf