我想编写自己的ActiveMQ Monitor。我可以从队列中获取队列和消息。但是消息体(内容)被缩短了。如何获得完整的Message Body?
我已经测试过:
获取:Always errors
http://localhost:8161/api/jolokia/exec/org.apache.activemq:type=Broker,brokerName=localhost,destinationType=Queue,destinationName=errors/browseMessages(java.lang.String)/JMSMessageID%3D%27ID%3AW530-62766-1419849619826-0%3A15%3A1%3A1%3A1%27
http://localhost:8161/api/jolokia/exec/org.apache.activemq:type=Broker,brokerName=localhost,destinationType=Queue,destinationName=errors/browseMessages(java.lang.String)/JMSMessageID='ID:W530-62766-1419849619826-0:15:1:1:1'
发帖:
http://localhost:8161/api/jolokia/?ignoreErrors=true&canonicalNaming=false
{
"type":"exec",
"mbean":"org.apache.activemq:type=Broker,brokerName=localhost,destinationType=Queue,destinationName=errors",
"operation":"browseMessages(java.lang.String)",
"arguments":["JMSMessageID='ID:W530-62766-1419849619826-0:15:1:1:1'"],
}
错误:java.lang.OutOfMemoryError: Java heap space
http://localhost:8161/api/jolokia/?ignoreErrors=true&canonicalNaming=false
{
"type":"exec",
"mbean":"org.apache.activemq:type=Broker,brokerName=localhost,destinationType=Queue,destinationName=errors",
"operation":"browseMessages(java.lang.String)",
"arguments":["JMSMessageID='ID:W530-62766-1419849619826-0:15:1:1:1'"],
"path":"content"
}
错误:java.lang.NumberFormatException : For input string: "content"
我能工作的唯一方法是按照Post:
http://localhost:8161/api/jolokia/?maxDepth=7&maxCollectionSize=500&ignoreErrors=true&canonicalNaming=false
{
"type":"exec",
"mbean":"org.apache.activemq:type=Broker,brokerName=localhost,destinationType=Queue,destinationName=errors",
"operation":"browseMessages(java.lang.String)",
"arguments":["JMSMessageID='ID:W530-62766-1419849619826-0:15:1:1:1'"],
}
但后来我只获得了前500个Chars
感谢您的帮助
答案 0 :(得分:0)
对我有用,不影响队列状态,这是一个目标:
#! /bin/bash
url="http://localhost:8161/api/jolokia/?maxDepth=10&maxCollectionSize=1000&ignoreErrors=true"
u='admin:admin'
q='orders.input'
m="org.apache.activemq:type=Broker,brokerName=localhost,destinationType=Queue,destinationName=$q"
l="curl.log"
s='"operation":"browseMessages()"'
d='{"type":"exec", "mbean":"'"$m"'", '"$s"'}'
jq='[.value[].jMSMessageID]'
sed="s/^ \"ID:([a-zA-Z0-9_:-]{10,})\",?$/\1/p"
ids="`curl -u \"$u\" --stderr \"$l\" -d \"$d\" \"$url\" |jq \"$jq\" |sed -rn \"$sed\"`"
jq='[{"time": .value.JMSTimestamp, "id": .value.JMSMessageID, "msg": .value.Text}]'
d="{\"type\":\"exec\", \"mbean\":\"$m\", \"operation\":\"getMessage(java.lang.String)\", \"arguments\":[\"ID:X\"]}"
echo "$ids" |xargs -iX curl -u "$u" --stderr "$l" -d "$d" "$url" |jq "$jq"
答案 1 :(得分:-1)
根据评论,留下这个作为答案。
Jolokia API是一个管理API,而不是消息API。 ActiveMQ项目提供了一个绑定到/api/message
的REST API,供用户使用。
可在此处找到完整的API详细信息:http://activemq.apache.org/rest.html
假设您有一个名为“ERRORS”的队列,并且ActiveMQ正在默认配置上运行。您可以POST
到此网址:http://localhost:8161/api/message/ERRORS?type=queue
添加消息。请查看完整格式的文档。然后,您可以通过在同一网址上执行GET
来阅读此队列中的邮件:http://localhost:8161/api/message/ERRORS?type=queue
默认情况下,您需要为每个操作传递身份验证信息。