如何通过JMX向ActiveMQ Artemis队列发送和移除消息?
通过JMX操作ActiveMQ Artemis队列的消息
ActiveMQ Artemis的JMX MBean结构和Classic完全不同,别再套用Classic的那套了,下面是具体的操作方法:
发送消息
你需要找到目标队列对应的MBean,路径格式为:org.apache.activemq.artemis:broker=<你的Broker名称>,component=addresses,address=<队列所属地址名>,subcomponent=queues,routing-type=<路由类型(如ANYCAST/MULTICAST)>,queue=<队列名称>
找到该MBean后,调用它的sendMessage方法,参数可按需填写:
body:消息内容字符串user/password:若Broker未开启认证,直接传nulldeliveryDelay:延迟投递时间,填0表示立即投递expiration:消息过期时间,填0表示永不过期durable:是否持久化,一般填truepriority:消息优先级,范围0-9,默认填4即可replyTo/correlationID/properties:不需要的话传null
比如最简调用:sendMessage("测试消息", null, null, 0, 0, true, 4, null, null, null),就能往队列发送一条基础消息。
移除消息
同样使用上述队列MBean,有两种常用操作:
- 移除单条消息:调用
removeMessage(String messageID),传入要删除的消息ID(可通过队列的listMessages方法获取消息列表及对应ID) - 清空整个队列:直接调用
removeAllMessages(),执行后队列内所有消息都会被删除
注意:默认情况下Artemis的JMX是开启的,默认端口1099,用jconsole、jvisualvm这类工具即可连接操作。若你的Broker修改过JMX配置,对应调整连接参数即可。
内容的提问来源于stack exchange,提问作者user21680529
相关产品推荐
相关产品推荐

