ActiveMQ知识点
1:JMS两种消息传送模型-点对点与发布/订阅模式
点对点是消费者主动从队列中请求获取消息-拉模式
消息自动广播,消费者无需通过主动请求或轮询主题来获得消息-推模式
两种模式比较:
2.JMS公共API:
ConnectionFactory / Connection / Session / Message / Destination / MessageProducer / MessageConsumer
点对点API-基于队列的接口:
QueueConnectionFactory / QueueConnection / QueueSession / Message / Queue / QueueSender / QueueReceiver
发布/订阅API-基于主题的AIP:
TopicConnectionFactory / TopicConnection /
TopicSession / Message / Topic / TopicPublisher / TopicSubscriber
3.ActiveMQ消息类型-发送与接收消息类型要一致
TextMessage/ObjectMessage/MapMessage/BytesMessage/StreamMessage
4.事务消息与非事务消息
事务消息必须在发送和接收完消息后显式地调用session.commit();
事务性消息,不管设置何种消息确认模式,都会自动被确认;与设置的确认机制无关,但官方推荐事务性消息使用事务确认机制.
5。消息确认机制: 消息只有在被确认之后,才认为已经被成功消费,然后消息才会从队列或主题中删除,消息成功消费包含三个阶段(客户端接收,客户端处理,客户端确认)
(1)、Session.AUTO_ACKNOWLEDGE;客户(消费者)成功从receive方法返回时,或者从MessageListener.onMessage方法成功返回时,会话自动确认消息,然后自动删除消息.
(2)、Session.CLIENT_ACKNOWLEDGE;客户通过显式调用消息的acknowledge方法确认消息,。 即在接收端调用message.acknowledge();方法,否则,消息是不会被删除的.
(3)、Session. DUPS_OK_ACKNOWLEDGE ;自动批量确认,是一种“懒散的”消息确认,消息可能会重复发送,在第二次重新传送消息时,消息头的JMSRedelivered会被置为true标识当前消息已经传送过一次,客户端需要进行消息的重复处理控制。
(4)、 Session.SESSION_TRANSACTED;事务提交并确认。
6.消息的持久化与非持久化 --点对点模式默认持久化
(1)-AMQ消息存储-基于文件的存储方式,它具有写入速度快和容易恢复的特点,默认32M
(2)-KahaDB消息存储-基于文件的本地数据库储存形式
(3)-JDBC消息存储
。如果是非持久化的,那么,服务一旦宕机之类的情况发生,消息即会被删除。默认是持久化机制
7.消息过滤 ---ctiveMQ提供了一种机制,可根据消息选择器中的标准来执行消息过滤,只接收符合过滤标准的消息;生产者可在消息中放入特有的标志,而消费者使用基于这些特定的标志来接收消息;
(1)、发送消息放入特殊标志:message . setString Property ( name , value ) ;
(2)、接收消息使用基于特殊标志的消息选择器:
MessageConsumer createConsumer(Destination destination, String messageSelector);
8.消息的接收方式
(1)同步接收:receive()方法接收消息叫同步接收
(2)异步接收:使用监听器接收消息
9.JmsTemplate-消息接收与发送模版方法
10:ActiveMQPrefetchPolicy-客户端消息获取策略
11:RedeliveryPolicy-消息重发策略
12:死信队列- 用来保存处理失败或者过期的消息。 当一个消息被重发超过最大重发次数,broker会将此消息发往死信队列,可以单独使用死信消费者处理死信队列
出现下面情况时,消息会被重发:
(1). 事务会话被回滚。
(2). 事务会话在提交之前关闭。
(3).会话使用CLIENT_ACKNOWLEDGE模式,并且Session.recover()被调用。
(4). 自动应答失败