(转)ActiveMQ消息特性:Advisory Message(通知消息)

简单的说就是实现了ActiveMQ的broker上各种操作的记录跟踪和通知。

使用这个功能,你可以实时的知道broker上

  1. 创建或销毁了连接,
  2. 添加或删除了生存者或消费者,
  3. 添加或删除了主题或队列,
  4. 有消息发送和接收,
  5. 什么时候有慢消费者,
  6. 什么时候有快生产者
  7. 什么时候什么消息被丢弃
  8. 什么时候broker被添加到集群(主从或是网络连接)

这个机制是ActiveMQ对JMS协议的重要补充,也是基于JMS实现的ActiveMQ的可管理性的一部分。多个ActiveMQ的相互协调和互操作的基础设置。

使用示例与注意事项

使用很简单,完全的jms方式,示例如下

...

    Destination advisoryDestination = AdvisorySupport.getProducerAdvisoryTopic(destination)
    MessageConsumer consumer = session.createConsumer(advisoryDestination);
    consumer.setMessageListener(this);
....
public void onMessage(Message msg){
    if (msg instanceof ActiveMQMessage){
        try {
             ActiveMQMessage aMsg =  (ActiveMQMessage)msg;
             ProducerInfo prod = (ProducerInfo) aMsg.getDataStructure();
        } catch (JMSException e) {
            log.error("Failed to process message: " + msg);
        }
    }
}

通过拿到的消息的数据结构,可以进一步的拿到相关操作信息。

而且Advisory消息都是先返回当前的所有存在数据,比如现在已经存在的所有连接或是队列信息,然后再实时通知你新创建和断开的连接,新添加或删除的队列等等。。。

ActiveMQ.Advisory.Queue 数据结构为DestinationInfo,先拿到broker上现有的所有队列列表
如果再有add或remove队列的操作,拿到通知,operationType=0为add,为1则为remove
为topic时,自动过滤掉Advisory的topic。

ActiveMQ.Advisory.Producer.Queue 数据结构为ProducerInfo,其中包含Producer的参数信息
ActiveMQ.Advisory.Consumer.Queue 数据结构为ConsumerInfo,其中包含Consumer的参数信息
使用的时候,需要以此为前缀,监听需要的队列,比如kk.adt,则应该写
Topic topic = new ActiveMQTopic("ActiveMQ.Advisory.Consumer.Queue.kk.adt");
监听所有队列则
Topic topic = new ActiveMQTopic("ActiveMQ.Advisory.Consumer.Queue..>");
Producer或Consumer断开时,数据结构为RemoveInfo。
主题的监听类似。

持久订阅者上线时是ConsumerInfo,里面有clientId和consumerId,下线时的RemoveInfo里有consumerId,跟上线时对应。

ActiveMQ内置了一些工具类,根据你需要监听的队列名,自动拼Advisory的名称:
例如 AdvisorySupport.getProducerAdvisoryTopic(new ActiveMQTopic("kk.adt"));

broker接收到或是投递消息的通知默认是关闭的。
需要在policy上设置相应的开关。 消息处理相关的Advisory的数据结构是消息本身。

客户端连接相关的通知消息 都是默认开启的

Advisory Topics Description properties Data Structure
ActiveMQ.Advisory.Connection Connection start & stop messages
ActiveMQ.Advisory.Producer.Queue Producer start & stop messages on a Queue String=‘producerCount‘ - the number of producers ProducerInfo
ActiveMQ.Advisory.Producer.Topic Producer start & stop messages on a Topic String=‘producerCount‘ - the number of producers ProducerInfo
ActiveMQ.Advisory.Consumer.Queue Consumer start & stop messages on a Queue String=‘consumerCount‘ - the number of Consumers ConsumerInfo
ActiveMQ.Advisory.Consumer.Topic Consumer start & stop messages on a Topic String=‘consumerCount‘ - the number of Consumers ConsumerInfo

队列和消息的通知消息  队列相关的是默认开启的,消息相关的都需要手工配置Pilocy选项开启

Advisory Topics Description properties Data Structure default PolicyEntry property
ActiveMQ.Advisory.Queue Queue create & destroy null null true none
ActiveMQ.Advisory.Topic Topic create & destroy null null true none
ActiveMQ.Advisory.TempQueue Temporary Queue create & destroy null null true none
ActiveMQ.Advisory.TempTopic Temporary Topic create & destroy null null true none
ActiveMQ.Advisory.Expired.Queue Expired messages on a Queue String=‘orignalMessageId‘ - the expired id Message true none
ActiveMQ.Advisory.Expired.Topic Expired messages on a Topic String=‘orignalMessageId‘ - the expired id Message true none
ActiveMQ.Advisory.NoConsumer.Queue No consumer is available to process messages being sent on a Queue null Message false sendAdvisoryIfNoConsumers
ActiveMQ.Advisory.NoConsumer.Topic No consumer is available to process messages being sent on a Topic null Message false sendAdvisoryIfNoConsumers

从5.2版本新加的消息处理与性能相关的,都需要手工启动

Advisory Topics Description properties Data Structure default PolicyEntry property
ActiveMQ.Advisory.SlowConsumer.Queue Slow Queue Consumer String=‘consumerId‘ - the consumer id ConsumerInfo false advisoryForSlowConsumers
ActiveMQ.Advisory.SlowConsumer.Topic Slow Topic Consumer String=‘consumerId‘ - the consumer id ConsumerInfo false advisoryForSlowConsumers
ActiveMQ.Advisory.FastProducer.Queue Fast Queue producer String=‘producerId‘ - the producer id ProducerInfo false advisdoryForFastProducers
ActiveMQ.Advisory. FastProducer.Topic Fast Topic producer String=‘consumerId‘ - the producer id ProducerInfo false advisdoryForFastProducers
ActiveMQ.Advisory.MessageDiscarded.Queue Message discarded String=‘orignalMessageId‘ - the discarded id Message false advisoryForDiscardingMessages
ActiveMQ.Advisory.MessageDiscarded.Topic Message discarded String=‘orignalMessageId‘ - the discarded id Message false advisoryForDiscardingMessages
ActiveMQ.Advisory.MessageDelivered.Queue Message delivered to the broker String=‘orignalMessageId‘ - the delivered id Message false advisoryForDelivery
ActiveMQ.Advisory.MessageDelivered.Topic Message delivered to the broker String=‘orignalMessageId‘ - the delivered id Message false advisoryForDelivery
ActiveMQ.Advisory.MessageConsumed.Queue Message consumed by a client String=‘orignalMessageId‘ - the delivered id Message false advisoryForConsumed
ActiveMQ.Advisory.MessageConsumed.Topic Message consumed by a client String=‘orignalMessageId‘ - the delivered id Message false advisoryForConsumed
ActiveMQ.Advisory.FULL A Usage resource is at its limit String=‘usageName‘ - the name of Usage resource null false advisoryWhenFull
ActiveMQ.Advisory.MasterBroker A broker is now the master in a master/slave configuration null null true none

从5.4版本新加的DLQ的通知消息

Advisory Topics Description properties Data Structure default PolicyEntry property
ActiveMQ.Advisory.MessageDLQd.Queue Message sent to DLQ String=‘orignalMessageId‘ - the delivered id Message Always on advisoryForConsumed
ActiveMQ.Advisory.MessageDLQd.Topic Message sent to DLQ String=‘orignalMessageId‘ - the delivered id Message Always on advisoryForConsumed

从5.5版本新加的网络连接集群的通知消息

Advisory Topics Description properties Data Structure default
ActiveMQ.Advisory.NetworkBridge Network bridge being stopped or started Boolean="started" - true if bridge is started, false if it is stopped
Boolean="createdByDuplex" - true if the bridge is created by remote network connector
BrokerInfo - provides data of the remote broker Always on

打开通知消息开关的示例

<destinationPolicy>
   <policyMap><policyEntries>
      <policyEntry topic=">" advisoryForConsumed="true" />
   </policyEntries></policyMap>
</destinationPolicy>

此外,在broker上有个通知消息的总开关,设置false以后,所有的Advisory都不可用:

 <broker advisorySupport="false">...转自:http://blog.csdn.net/kimmking/article/details/8443679
时间: 2024-10-12 02:40:07

(转)ActiveMQ消息特性:Advisory Message(通知消息)的相关文章

[转]windows控件消息和控件通知消息大全

本篇文章主要介绍了"windows控件消息和控件通知消息大全",主要涉及到windows控件消息和控件通知消息大全方面的内容,对于windows控件消息和控件通知消息大全感兴趣的同学可以参考一下. Edit Control Notification Codes EN_SETFOCUS EN_KILLFOCUS EN_CHANGE EN_UPDATE EN_ERRSPACE EN_MAXTEXT EN_HSCROLL EN_VSCROLL Edit Control Messages EM

ActiveMQ(22):Consumer高级特性之消息分组(Message Groups)

一.简介 Message Groups就是对消息分组,它是Exclusive Consumer功能的增强. 逻辑上,Message Groups 可以看成是一种并发的Exclusive Consumer.跟所有的消息都由唯一的consumer处理不同,JMS 消息属性JMSXGroupID 被用来区分message group.Message Groups特性保证所有具有相同JMSXGroupID的消息会被分发到相同的consumer(只要这个consumer保持active). 另外一方面,M

ActiveMQ(17):Message之消息属性与自身的系统消息地址

一.消息属性 ActiveMQ支持很多消息属性,具体可以参见 http://activemq.apache.org/activemq-message-properties.html 常见的一些属性说明 1:Queue的消息默认是持久化的 2:消息的优先级默认是4 3:消息发送时设置了时间戳 4:消息的过期时间默认是永不过期,过期的消息进入DLQ,可以配置DLQ及其处理策略 5:如果消息时重发的,将会标记出来 6:JMSReplyTo标识响应消息发送到哪个Queue 7:JMSCorelation

JMS服务器ActiveMQ的初体验并持久化消息到MySQL数据库中

JMS服务器ActiveMQ的初体验并持久化消息到MySQL数据库中 一.JMS的理解JMS(Java Message Service)是jcp组织02-03年定义了jsr914规范(http://jcp.org/en/jsr/detail?id=914),它定义了消息的格式和消息传递模式:消息包括:消息头,消息扩展属性和消息体,其结构看起来与SOAP非常的相似,但一般情况下,SOAP主要关注远程服务调用,而消息则专注于信息的交换:消息分为:消息生产者,消息服务器和消息消费者.生产者与消费者之间

WCF技术剖析之十八:消息契约(Message Contract)和基于消息契约的序列化

在本篇文章中,我们将讨论WCF四大契约(服务契约.数据契约.消息契约和错误契约)之一的消息契约(Message Contract).服务契约关注于对服务操作的描述,数据契约关注于对于数据结构和格式的描述,而消息契约关注的是类型成员与消息元素的匹配关系. 我们知道只有可序列化的对象才能通过服务调用在客户端和服务端之间进行传递.到目前为止,我们知道的可序列化类型有两种:一种是应用了System.SerializableAttribute特性或者实现了System.Runtime.Serializat

JS Message 网页消息提醒

JS message是一个非常小的(用gzip压缩之后才3kb)JavaScript library 用于轻松在网页上展示通知提醒.除了通知,它还支持创建带风格的对话框和确认对话框.不需要任何JS框架.每一种消息类型(除了通知提醒)都拥有回调事件用于实现可定制的交互功能.消息外观也通过CSS自定义. 支持大部分浏览器除了IE6. 项目地址: http://dhtmlx.github.com/message/ 下载地址: https://github.com/DHTMLX/message Cust

确保zookeeper一定收到通知消息的方法

zookeeper能够同步同步各节点的znode数据,client可以使用getChildren,getData,exists方法在znode tree路径上设置watch,当watch路径上发生节点create.delete.update的时候,会通知到client.client可以得到通知后,再获取数据,执行业务逻辑操作. 但是因为没有消息接收后的确认机制,这个通知机制是不可靠的,也就是说znode的修改者并不知道是否所有的client都被通知到了,或者说client也不知道自己是否错过了哪

Java分布式:消息队列(Message Queue)

Java分布式:消息队列(Message Queue) 引入消息队列 消息,是服务间通信的一种数据单位,消息可以非常简单,例如只包含文本字符串:也可以更复杂,可能包含嵌入对象.队列,是一种常见的数据结构,它是保存消息的容器.那么消息队列就是以消息为基本单位的优先队列. 借助消息队列,系统的不同部分可相互通信并异步执行处理操作.消息队列提供一个临时存储消息的轻量级缓冲区,以及允许软件组件连接到队列以发送和接收消息的终端节点.这些消息通常较小,可以是请求.恢复.错误消息或明文信息等. 为什么使用消息

ActiveMQ(十一)——Message高级特性

一.消息属性二.Advisory Message三.延迟和定时消息投递四.Blob消息五.消息转换 原文地址:https://blog.51cto.com/mazongfei/2415613