From : JAVA 后端知识点梳理
JMS 基础
JMS (JAVA Message Service,java消息服务)是 java 提供的一套技术规范。用来异构系统 继承通信,缓解系统瓶颈,提高系统的伸缩性增强系统用户体验,使得系统模块化和组件化变得可行并更加灵活。
优点:异步、解耦、消息服务更加可靠l灵活
通过什么方式: 生产消费者模式 ( 生产者 服务器 消费者 )
JMS 消息传输模型
P2P点对点模式:(一对一,消费者主动拉去数据,消息收到后消息清除)
点对点模型通常是一个基于拉取或者轮询的消息传送模型,这种模型从队列中请求消息,而不是将消息推送到客户端。这个模型的特点是发送到队列的信息被一个且只有一个接收者接收处理,即使有多个消息监听者也是如此。
Pub/Sub发布/订阅模式(一对多,数据产生后,推送给所有订阅者)
发布订阅模型则是一个基于推送的消息传达模型。发布订阅模型可以有多种不同的订阅者,临时订阅者旨在主动监听主题时才接受消息,而持久订阅者则监听主题的所有消息,即当前订阅者不可用,处于离线状态。
queue.put (object) 数据生产
queue.take(object)数据消费
JMS 编程模型
-
ConnectionFactory
创建Connection对象的工厂,针对两种不同的jms消息模型,分别有QueueConnectionFactory和TopicConnectionFactory两种。可以通过JNDI来查找ConnectionFactory对象。
-
Destination
Destination的意思是消息生产者的消息发送目标或者说消息消费者的消息来源。对于消息生产者来说,它的Destination是某个队列(Queue)或某个主题(Topic);对于消息消费者来说,它的Destination也是某个队列或主题(即消息来源)。
所以,Destination实际上就是两种类型的对象:Queue、Topic可以通过JNDI来查找Destination。
- Connection
Connection表示在客户端和JMS系统之间建立的链接(对TCP/IP socket的包装)。Connection可以产生一个或多个Session。跟ConnectionFactory一样,Connection也有两种类型:QueueConnection和TopicConnection
- Session
Session是我们操作消息的接口。可以通过session创建生产者、消费者、消息等。Session提供了事务的功能。当我们需要使用session发送/接收多个消息时,可以将这些发送/接收动作放到一个事务中。同样,也分QueueSession和TopicSession。
- Producer
消息生产者由Session创建,并用于将消息发送到Destination。同样,消息生产者分两种类型:QueueSender和TopicPublisher。可以调用消息生产者的方法(send或publish方法)发送消息
- Consumer
消息消费者由Session创建,用于接收被发送到Destination的消息。两种类型:QueueReceiver和TopicSubscriber。可分别通过session的createReceiver(Queue)或createSubscriber(Topic)来创建。当然,也可以session的creatDurableSubscriber方法来创建持久化的订阅者。