ActiveMQ Message properties

ActiveMQ支持很多消息属性,具体可以参见
http://activemq.apache.org/activemq-message-properties.html
常见的一些属性说明
1:Queue的消息默认是持久化的
2:消息的优先级默认是4
3:消息发送时设置了时间戳
4:消息的过期时间默认是永不过期,过期的消息进入DLQ,可以配置DLQ及其处理策略
5:如果消息时重发的,将会标记出来
6:JMSReplyTo标识响应消息发送到哪个Queue
7:JMSCorelationID标识此消息相关联的消息id,可以用这个标识把多个消息连接起来
8:JMS同时也记录了消息重发的次数,默认是6次
9:如果有一组关联的消息需要处理,可以分组:只需要设置消息组的名字和这个消息是第几个消息
10:如果消息中一个事务环境,则TXID将被设置
11:此外ActiveMQ在服务器端额外设置了消息入列和出列的时间戳

12:ActiveMQ里消息属性的值,不仅可以用基本类型,还可以用List或Map类型

Advisory Message
Advisory Message是ActiveMQ自身的系统消息地址,可以监听该地址来获取activemq的系统信息。目前支持获取如下信息:
1:consumers, producers 和 connections的启动和停止
2:创建和销毁temporary destinations
3:topics 和 queues的消息过期
4:brokers 发送消息给 destinations,但是没有consumers
5:connections 启动和停止
几点说明:
1:所有Advisory的topic,前缀是:ActiveMQ.Advisory
2:所有Advisory的消息类型是:‘Advisory’ ,所有的Advisory都有的消息属性有:originBrokerId、originBrokerName、originBrokerURL
3:具体支持的topic和queue,请参看http://activemq.apache.org/advisory-message.html
打开Advisories , 默认Advisory的功能是关闭的
<destinationPolicy>
    <policyMap>
        <policyEntries>
            <policyEntry topic=">" advisoryForConsumed="true" />
        </policyEntries>
    </policyMap>

</destinationPolicy>

关闭Advisories , 有好几种方法
1:<broker advisorySupport="false">
2:也可在Java中写:
BrokerService broker = new BrokerService();
broker.setAdvisorySupport(false);
...
broker.start();
3:也可以在ActiveMQConnectionFactory上设置‘watchTopicAdvisories’ 属性
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory();
factory.setWatchTopicAdvisories(false);
4:也可在ConnectionURl上写:

"tcp://localhost:61616?jms.watchTopicAdvisories=false"

使用的方法和步骤:
1:要在配置文件里面开启Advisories
2:消息发送端没有变化
3:消息接收端:
(1)根据你要接收的信息类型,来设置不同的topic,当然也可以使用AdvisorySupport这个类来辅助创建,比如你想要得到消息生产者的信息,你可以:
Topic d=session.createTopic("ActiveMQ.Advisory.Producer.Topic.MyTopic"); 也可以使用:
Topic d = session.createTopic("MyTopic");
Destination d2 = AdvisorySupport.getProducerAdvisoryTopic(destination);
(2)由于这个topic默认不是持久化的,所以应该先开启接收端,然后再发送topic信息
(3)接收消息的时候,接收到的消息类型是ActiveMQMessage,所以类型转换的时候,要转换成ActiveMQMessage,然后再通过getDataStructure方法来得到具体的信息对象,如:
if (message instanceof ActiveMQMessage) {
    try {
        ActiveMQMessage aMsg = (ActiveMQMessage) message;
        ProducerInfo prod = (ProducerInfo) aMsg.getDataStructure();
        System.out.println("count==="+aMsg.getProperty("producerCount"));
        System.out.println(" prodd==="+prod.getProducerId());

    } catch (Exception e) { e.printStackTrace(); }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值