Java 以编程方式读取队列';s参数
我在Java 以编程方式读取队列';s参数,java,google-app-engine,Java,Google App Engine,我在queue.xml文件中定义了一个队列 <queue-entries> <queue> <name>crawler</name> <rate>1/s</rate> <retry-parameters> ... <task-retry-limit>5</task-retry-limit>
queue.xml
文件中定义了一个队列
<queue-entries>
<queue>
<name>crawler</name>
<rate>1/s</rate>
<retry-parameters>
...
<task-retry-limit>5</task-retry-limit>
</retry-parameters>
</queue>
</queue-entries>
现在,我需要获取给定队列的
任务重试限制
值。可能吗?我还没有在javadoc中找到这样做的方法 看来这是不可能的
如果您查看,您将看到没有定义这样的功能
您可以检索的唯一属性是名称,带有Queue.getName()代码>
我看不到使用当前appengine api检索它的方法
一种你称之为“黑客”的方法,可能是使用xml库解析queue.xml
文件,然后手动提取值。基于@Tim Castelijns的解决方案可以通过编程方式读取和解析文件
我们需要这样做才能工作。当然,您可以使用其他库将XML映射到POJO
示例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>
队列条目
import org.simpleframework.xml.Element;
import org.simpleframework.xml.Root;
@Root
public class QueueEntries {
@Element
private Queue queue;
public Queue getQueue() {
return queue;
}
}
排队
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;
}
}
是的,队列接口中确实没有定义重试限制getter。如果可能的话,我正在寻找一种更黑客的方法来获得重试限制。有没有可能获得示例代码,如何将此文件读入内存?根据我以前的经验,所有与文件相关的方法都会在GAE上抛出异常。我已经尝试了所有我想到的方法,包括使用反射读取QueueImpl
字段,但是现在似乎不可能读取这些值。@tomrozb例如,类似这样的内容我想重要的部分是您正确地获得了xml文件的路径抱歉,也许我的问题不清楚。我不是问如何解析这个文件,而是问如何处理这个文件。根据我的经验,所有与文件系统相关的操作都不允许在GAE上进行。我建议您作为一个新的、单独的问题来问这个问题?因为它与这个问题的主题没有直接关系
import org.simpleframework.xml.Element;
import org.simpleframework.xml.Root;
@Root
public class QueueEntries {
@Element
private Queue queue;
public Queue getQueue() {
return 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;
}
}
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;
}
}