通知消息(Advisory Message)
简单的说就是实现了ActiveMQ的broker上各种操作的记录跟踪和通知。
使用这个功能,你可以实时的知道broker上
1. 创建或销毁了连接,
2. 添加或删除了生存者或消费者,
3. 添加或删除了主题或队列,
4. 有消息发送和接收,
5. 什么时候有慢消费者,
6. 什么时候有快生产者
7. 什么时候什么消息被丢弃
8. 什么时候broker被添加到集群(主从或是网络连接)
这个机制是ActiveMQ对JMS协议的重要补充,也是基于JMS实现的ActiveMQ的可管理性的一部分。多个ActiveMQ的相互协调和互操作的基础设置。
分类 | Advisory | 说明 | DataStruct类型 |
客户端连接 | ActiveMQ.Advisory.Connection | 客户端连接、或终止时[Connection.start()、 | ConnectionInfo |
| ActiveMQ.Advisory.Producer.Queue | 当生产者被创建、或终止时 | ProducerInfo |
| ActiveMQ.Advisory.Producer.Topic |
|
|
| ActiveMQ.Advisory.Consumer.Queue | 当消费者被创建、或终止时 |
|
| ActiveMQ.Advisory.Consumer.Topic |
|
|
队列相关 | ActiveMQ.Advisory.Topic | 任何Topic被创建或者销毁时 | DestinationInfo |
| ActiveMQ.Advisory.Queue |
|
|
消息相关 | ActiveMQ.Advisory.MessageConsumed.Queue | 当消息被成功消费时[消息应答成功] | ActiveMQMessage |
| ActiveMQ.Advisory.MessageConsumed.Topic |
|
|
public static void testAdvisory4() throws Exception {
ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection connection = factory.createConnection();
connection.start();
final Session session = connection.createSession(false/*支持事务*/, Session.AUTO_ACKNOWLEDGE);
Destination queue = AdvisorySupport.getMessageConsumedAdvisoryTopic(session.createQueue("test_123"));
MessageConsumer consumer = session.createConsumer(queue);
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
System.out.println(message);
ActiveMQMessage consumedMessage = (ActiveMQMessage) ((ActiveMQMessage) message).getDataStructure();
System.out.println("队列:[" + consumedMessage.getDestination() + "],消息:[id="
+ consumedMessage.getMessageId() + "]被成功接收。");
}
});
}