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.

+3


source to share


2 answers


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;
    }
}

      

0


source


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.

+3


source







All Articles