2011-09-07 13 views
5

एक Google अनुप्रयोग इंजन एप्लिकेशन में मैं निम्नलिखित लाइनों का इस्तेमाल किया एक साइट से एक पृष्ठ को पढ़ने के लिए:Google ऐप इंजन का समय समाप्त हो गया?

String Url="http://...",line,Result=""; 

    URL url=new URL(Url+"?r="+System.currentTimeMillis()); 
    BufferedReader reader=new BufferedReader(new InputStreamReader(url.openStream())); 

    while ((line=reader.readLine())!=null) { Result+=line+"\n"; } 
    reader.close(); 

लेकिन मैं निम्नलिखित त्रुटि मिली:

Uncaught exception from servlet 
com.google.apphosting.api.DeadlineExceededException: This request (f5e2889605d27d42) started at 2011/09/07 03:20:41.458 UTC and was still executing at 2011/09/07 03:21:30.888 UTC. 
    at sun.misc.Unsafe.park(Native Method) 
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226) 
    at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedNanos(AbstractQueuedSynchronizer.java:1037) 
    at java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireSharedNanos(AbstractQueuedSynchronizer.java:1326) 
    at com.google.common.util.concurrent.AbstractFuture$Sync.get(AbstractFuture.java:276) 
    at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:82) 
    at com.google.appengine.tools.development.TimedFuture.get(TimedFuture.java:55) 
    at com.google.common.util.concurrent.ForwardingFuture.get(ForwardingFuture.java:69) 
    at com.google.apphosting.runtime.ApiProxyImpl.doSyncCall(ApiProxyImpl.java:177) 
    at com.google.apphosting.runtime.ApiProxyImpl.access$000(ApiProxyImpl.java:56) 
    at com.google.apphosting.runtime.ApiProxyImpl$1.run(ApiProxyImpl.java:150) 
    at com.google.apphosting.runtime.ApiProxyImpl$1.run(ApiProxyImpl.java:148) 
    at java.security.AccessController.doPrivileged(Native Method) 

लगता है यह समय लगा की तुलना में यह चाहते हैं प्रतीक्षा करने के लिए, यदि वह साइट धीमी है तो मैं क्या कर सकता हूं?

+0

यह एक अनुरोध समय समाप्ति है, जो 30 सेकंड के बाद होता है। चूंकि URLFetch अनुरोध 10 सेकंड तक सीमित हैं, इसलिए आपको केवल एक कॉल से अधिक करना होगा। तुम क्या कर रहे हो? –

+0

हां, मुझे 6 श्रेणियों से पृष्ठ सामग्री मिल रही थी और देखें कि मेरा एनएमजावा कहां रैंक किया गया है, इसलिए यह प्रत्येक पृष्ठ के माध्यम से एनएमजेवा नाम खोजने के लिए और यह गणना करता है कि यह कहां से खड़ा है। – Frank

+1

क्या आपने एसिंक्रोनस यूआरएलफ़ेच का उपयोग करने पर विचार किया है? यह आपको समांतर में सभी अनुरोध करने देगा। –

उत्तर

3

DeadlineExceededException फेंक दिया गया है जब आपका कोड, आपके वेब एप्लिकेशन के अनुरोध को संभालने के लिए 30 सेकंड से अधिक समय लेता है। संभवतः आपके कोड को प्रक्रिया के लिए कुछ समय लग रहा है क्योंकि किसी अन्य साइट से डेटा प्राप्त करने के लिए उसे कितना समय इंतजार करना पड़ा था।

आप उस डेटा को लाने और संसाधित करने के लिए task queue पर एक कार्य बना सकते हैं, और अपने कार्य पर प्रगति के साथ उत्तर देने के लिए अपना वेब अनुरोध/प्रतिक्रिया प्रवाह बदल सकते हैं।

+1

अपवाद सामना करना एक अनुरोध समय सीमा है, यूआरएलफ़ेच की समयसीमा नहीं। –

+0

@ निक अच्छा बिंदु मैं अपना जवाब संशोधित करूंगा। –

+0

वू, जटिल लगता है, Google App Engine साइट पर ऐसा करने के लिए कोई नमूना कोड? यह बहुत उपयोगी होगा। – Frank

2

यदि आपका कोड अनुरोध हैंडलर के अंदर चल रहा है, तो डिफ़ॉल्ट रूप से एक ऐप-इंजन-लागू 60 सेकंड की समयसीमा है। आप इसे बदल नहीं सकते "स्केलिंग प्रकार" के तहत "समय सीमा" पंक्ति/"स्वचालित स्केलिंग" इस पृष्ठ पर चार्ट के स्तंभ देखें:

https://developers.google.com/appengine/docs/java/modules/

हालांकि, इस कोड यदि आप अपने मॉड्यूल को बदलने के कुछ घंटे के लिए चलाने के लिए सक्षम हो जाएगा "मैन्युअल स्केलिंग" और "बी 1" - "बी 4" उदाहरण का उपयोग करने के लिए। उदाहरण:

डिफ़ॉल्ट/src/मुख्य/webapp/वेब-INF/appengine-web.xml:

<?xml version="1.0" encoding="utf-8"?> 
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> 
    <application>myapp</application> 
    <module>default</module> 
    <version>1</version> 
    <threadsafe>true</threadsafe> 

    <instance-class>B1</instance-class> 
    <manual-scaling> 
    <instances>1</instances> 
    </manual-scaling> 
</appengine-web-app> 

उदाहरण के इस प्रकार पर, आपके अनुरोध आमतौर पर कुछ घंटों के लिए टाइम आउट नहीं होंगे। (दस्तावेज का दावा है कि समय सीमा "अनिश्चित" है।)

संबंधित मुद्दे