tomrozb
tomrozb

Reputation: 26261

Programmatically read a Queue's parameters

I've got a queue defined in 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 obtain a queue in Java I'm using simple code

Queue queue = QueueFactory.getQueue("crawler");

Now I need to obtain the task-retry-limit value for given queue. Is it possible? I haven't found any method to do so in javadoc.

Upvotes: 3

Views: 116

Answers (2)

tomrozb
tomrozb

Reputation: 26261

Solution based on @Tim Castelijns answer to read and parse the file programmatically.

SimpleXML in needed for this to work. Of course you can use other library to map XML to POJO.

Sample 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 value

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

Upvotes: 0

Tim
Tim

Reputation: 43334

It appears this is not possible.

If you look at the source code, you will see that there is no such functionality defined.

The only property you can retrieve is the name, with Queue.getName();


I see no way to retrieve it using the current appengine api.

A hacky way as you call it, could be to parse the queue.xml file with an xml library, and extract the value manually.

Upvotes: 3

Related Questions