Read queue parameters programmatically
I have a queue defined in a queue.xml
file
<queue-entries>
<queue>
<name>crawler</name>
<rate>1/s</rate>
<retry-parameters>
...
<task-retry-limit>5</task-retry-limit>
</retry-parameters>
</queue>
</queue-entries>
To get a queue in Java I am using simple code
Queue queue = QueueFactory.getQueue("crawler");
Now I need to get the value task-retry-limit
for a given queue. Is it possible? I haven't found any way to do this in the javadoc.
source to share
The solution, based on @Tim Castelijns, responds to reading and parsing a file programmatically.
SimpleXML required for this. You can of course use another library to map XML to POJOs.
Example queue.xml
<queue-entries>
<queue>
<name>crawler</name>
<rate>1/s</rate>
<retry-parameters>
<min-backoff-seconds>10</min-backoff-seconds>
<max-backoff-seconds>300</max-backoff-seconds>
<max-doublings>2</max-doublings>
<task-retry-limit>5</task-retry-limit>
</retry-parameters>
</queue>
</queue-entries>
How to read the meaning
Serializer serializer = new Persister();
File source = new File("WEB-INF/queue.xml");
QueueEntries queueEntries = serializer.read(QueueEntries.class, source);
int retryLimit = queueEntries.getQueue().getRetryParameters().getTaskRetryLimit());
QueueEntries
import org.simpleframework.xml.Element;
import org.simpleframework.xml.Root;
@Root
public class QueueEntries {
@Element
private Queue queue;
public Queue getQueue() {
return queue;
}
}
Queue
import org.simpleframework.xml.Element;
public class Queue {
@Element
private String rate;
@Element
private String name;
@Element(name = "retry-parameters")
private RetryParameters retryParameters;
public String getRate() {
return rate;
}
public String getName() {
return name;
}
public RetryParameters getRetryParameters() {
return retryParameters;
}
}
RetryParameters
import org.simpleframework.xml.Element;
public class RetryParameters {
@Element(name = "min-backoff-seconds")
private String minBackoffSeconds;
@Element(name = "max-backoff-seconds")
private String maxBackoffSeconds;
@Element(name = "max-doublings")
private String maxDoublings;
@Element(name = "task-retry-limit")
private String taskRetryLimit;
public String getMinBackoffSeconds() {
return minBackoffSeconds;
}
public String getMaxDoublings() {
return maxDoublings;
}
public String getMaxBackoffSeconds() {
return maxBackoffSeconds;
}
public String getTaskRetryLimit() {
return taskRetryLimit;
}
}
source to share
It looks like it's impossible.
If you look at the source code , you will see that no such functionality is defined.
The only property you can get is the name, with Queue.getName();
I don't see any way to get it using the current appengine api.
A hacky way, as you call it, could be to parse the file queue.xml
with the xml library and manually extract the value.
source to share