ActiveMQ Jolokia API How can I get the full Message Body

匿名 (未验证) 提交于 2019-12-03 00:56:02

问题:

I want to write my own ActiveMQ Monitor. I can get Queues and Messages from a Queue. But the Message Body (content) is shorted. How can I get the full Message Body?

This I have tested:

Get: 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' 

With Post:

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'"], } 

Error: 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" } 

Error: java.lang.NumberFormatException : For input string: "content"

The only way i can i work is per 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'"], } 

But then I get only the first 500 Chars

Thank you for your help

回答1:

works for me and doesn't impact the queue state, which was a goal:

#! /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" 


回答2:

Based on comments, leaving this as an answer for you.

The Jolokia API is a management API, not a message consuming API. The ActiveMQ project provides a REST API that is bound to /api/message for users to work with.

The full API details can be found here: http://activemq.apache.org/rest.html

Suppose you have a queue named "ERRORS" and ActiveMQ is running on the default config. You can POST to this URL: http://localhost:8161/api/message/ERRORS?type=queue to add a message. Please see their docs on the full format. You can then read messages from this queue by doing a GET on the same URL: http://localhost:8161/api/message/ERRORS?type=queue

You'll need to pass in authentication information for each operation, by default.



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!