一、什么是ActiveMQ
ActiveMQ是一种开源的基于JMS(Java Message Servie)规范的一种消息中间件的实现,ActiveMQ的设计目标是提供标准的,面向消息的,能够跨越多语言和多系统的应用集成消息通信中间件。
二、什么时候需要用ActiveMQ
多个项目之间集成
(1) 跨平台
(2) 多语言
(3) 多项目
降低系统间模块的耦合度,解耦
(1) 软件扩展性
系统前后端隔离
(1) 前后端隔离,屏蔽高安全区
三、基本构件和概念
- 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。 - 消息的生产者
消息生产者由Session创建,并用于将消息发送到Destination。同样,消息生产者分两种类型:QueueSender和TopicPublisher。
可以调用消息生产者的方法(send或publish方法)发送消息。 - 消息消费者
消息消费者由Session创建,用于接收被发送到Destination的消息。两种类型:QueueReceiver和TopicSubscriber。
可分别通过session的createReceiver(Queue)或createSubscriber(Topic)来创建。当然,也可以session的creatDurableSubscriber方法来创建持久化的订阅者。 - MessageListener
消息监听器。如果注册了消息监听器,一旦消息到达,将自动调用监听器的onMessage方法。EJB中的MDB(Message-Driven Bean)就是一种MessageListener。
四、各组件关系
连接工厂–>生成连接–>创建会话(创建生产者和消费者)
消息 消息
生产者---------------->目的地------------->消费者
1 --------(1)PTP(Queue)---------- 1
1 --------(2)pub/sub(Topic)------ n
如果你希望发送的每个消息都应该被成功处理的话,那么你需要P2P模式。
五、消费消息有两种方式
- 同步消费:receive从目的地获取消息,阻塞直到数据到达
- 异步消费:注册消息监听器,定义数据到达时的动作
六、消息
消息头:getter和setter
消息属性:除消息头以外的消息信息
消息体:JMS定义的消息类型:TextMessage、MapMessage、ByteMessage、StreamMessage、ObjectMessage
七、编程模式
- 消息产生者向JMS发送消息的步骤
- 创建连接使用的工厂类JMS ConnectionFactory
- 使用管理对象JMS ConnectionFactory建立连接Connection
- 使用连接Connection 建立会话Session
- 使用会话Session和管理对象Destination创建消息生产者MessageSender
- 使用消息生产者MessageSender发送消息
- 消息消费者从JMS接受消息的步骤
创建连接使用的工厂类JMS ConnectionFactory - 使用管理对象JMS ConnectionFactory建立连接Connection
- 使用连接Connection 建立会话Session
- 使用会话Session和管理对象Destination创建消息消费者MessageReceiver
- 使用消息消费者MessageReceiver接受消息,需要用setMessageListener将MessageListener接口绑定到MessageReceiver
- 消息消费者必须实现了MessageListener接口,需要定义onMessage事件方法。
八、对Broker的理解
个人理解,Broker是MQ的一个实例,或者叫一个节点。是消息队列核心,相当于一个控制中心,负责路由消息、保存订阅和连接、消息确认和控制事务
Broker接口
定义了一些获取broker本身相关信息,添加connection、destination、session、消息生产者、控制事务的接口