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:JMSCorelationID标识此消息相关联的消息id,可以用这个标识把多个消息连接起来

8:JMS同时也记录了消息重发的次数,默认是6次

9:如果有一组关联的消息需要处理,可以分组:只需要设置消息组的名字和这个消息是第几个消息

10:如果消息中一个事务环境,则TXID将被设置

11:此外ActiveMQ在服务器端额外设置了消息入列和出列的时间戳

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

二、自身的系统消息地址(Advisory Message)

2.1 简介

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

2.2 配置使用

打开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"

2.3 使用的方法和步骤

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方法来得到具体的信息对象,如:

    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();
    }
时间: 2024-10-13 16:04:56

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

第17章-Spring消息

1 异步消息简介 像RMI和Hessian/Burlap这样的远程调用机制是同步的.如图17.1所示,当客户端调用远程方法时,客户端必须等到远程方法完成后,才能继续执行.即使远程方法不向客户端返回任何信息,客户端也要被阻塞直到服务完成. 消息则是异步发送的,如图17.2所示,客户端不需要等待服务处理消息,甚至不需要等待消息投递完成.客户端发送消息,然后继续执行,这是因为客户端假定服务最终可以收到并处理这条消息. 1.1 发送消息 在异步消息中有两个主要的概念:消息代理(message broke

Kafka、RabbitMQ、RocketMQ、ActiveMQ 17 个方面综合对比

本文将从,Kafka.RabbitMQ.ZeroMQ.RocketMQ.ActiveMQ 17 个方面综合对比作为消息队列使用时的差异.(欢迎加入Java程序员群:630441304,一起学习交流会) 一.资料文档 Kafka:中.有kafka作者自己写的书,网上资料也有一些. rabbitmq:多.有一些不错的书,网上资料多. zeromq:少.没有专门写zeromq的书,网上的资料多是一些代码的实现和简单介绍. rocketmq:少.没有专门写rocketmq的书,网上的资料良莠不齐,官方文

ActiveMQ(2)---ActiveMQ原理分析之消息发送

持久化消息和非持久化消息的发送策略 消息同步发送和异步发送 ActiveMQ支持同步.异步两种发送模式将消息发送到broker上.同步发送过程中,发送者发送一条消息会阻塞直到broker反馈一个确认消息,表示消息已经被broker处理.这个机制提供了消息的安全性保障,但是由于是阻塞的操作,会影响到客户端消息发送的性能 异步发送的过程中,发送者不需要等待broker提供反馈,所以性能相对较高.但是可能会出现消息丢失的情况.所以使用异步发送的前提是在某些情况下允许出现数据丢失的情况. 默认情况下,非

RabbitMQ入门教程(十一):消息属性Properties

原文:RabbitMQ入门教程(十一):消息属性Properties 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/vbirdbest/article/details/78698364 分享一个朋友的人工智能教程.比较通俗易懂,风趣幽默,感兴趣的朋友可以去看看. 简介 发送消息可以为消息指定一些参数 Delivery mode: 是否持久化,1 - Non-persistent,2 -

【EBS WORKFLOW】工作流使用document类型的消息属性

工作流使用document类型的消息属性 工作流的消息内容,最简单的是TEXT文本,或者静态的HTML文本,但能够满足的情况很有限. 很多时候工作流要显示的是一个列表,不确定有多少行,所以不能提前设置,也不可能枚举所有变量. 这时候需要使用动态的消息内容,也就是本文讲述的document类型的消息属性. 开发步骤 定义一个用于动态获取消息内容的存储过程 Oracle Workflow Developer’s Guide 6-12 PROCEDURE get_request_msg(documen

ActiveMQ结合Spring收发消息

直接使用 ActiveMQ 的方式需要重复写很多代码,且不利于管理,Spring 提供了一种更加简便的方式----Spring JMS ,通过它可以更加方便地使用 ActiveMQ. Maven 依赖结合Spring使用ActiveMQ的依赖如下: ActiveMQ.xml 文件 <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.o

ActiveMQ(4)---ActiveMQ原理分析之消息消费

消费端消费消息的原理 我们通过上一节课的讲解,知道有两种方法可以接收消息,一种是使用同步阻塞的MessageConsumer#receive方法.另一种是使用消息监听器MessageListener.这里需要注意的是,在同一个session下,这两者不能同时工作,也就是说不能针对不同消息采用不同的接收方式.否则会抛出异常.至于为什么这么做,最大的原因还是在事务性会话中,两种消费模式的事务不好管控 消费端消费消息源码分析 ActiveMQMessageConsumer.receive消费端同步接收

Amazon SNS 消息属性

Amazon SNS 支持传输消息属性,消息属性可让您提供消息相关的结构化元数据项目(如时间戳.地理空间数据.签名和标识符).每条消息最多可以包含 10 个属性. 消息属性是可选的,并独立于消息正文(但随消息正文一起发送).接收方可以使用此信息来决定如何处理消息,而不必先处理消息正文. 每个消息属性包含以下项目: Name – 消息属性的名称可以包含以下字符:A-Z.a-z.0-9.下划线 (_).连字符 (-) 和句点 (.).名称不得以句点开头或结尾,并且不应包含连续句点.名称区分大小写,且

RocketMQ(七)——Transaction Message(事务消息)

分布式事务 通过MQ解决分布式事务的思路 1) 业务和消息生成耦合在一起 2) 业务和消息解耦 RocketMQ 中的事务消息 1) 目前RMQ3.2.6中事务消息的实现原理及存在的问题 2) 问题解决思路 本文介绍RocketMQ提供的第三种类型的消息——Transaction Message(事务消息).在说事务消息之前,我们先来说说分布式事务的那些事! 分布式事务 什么是分布式事务,我的理解是一半事务.怎么说,比如有2个异构系统,A异构系统要做T1,B异构系统要做T2,要么都成功,要么都失