2012-12-18 23 views
6

मैंने मुख्य (तर्क) के साथ एक ग्रोवी मेन ऐप लिखा है।एम्बेडेड vert.x कैसे चलाएं?

जब मैं इसे लॉन्च करता हूं, तो सीधे JVM बाहर निकलें ("JVM निष्पादन का अंत!")।

import org.vertx.groovy.core.Vertx 

class MainApp { 

    public static void main(String[] args) { 

     Vertx vertx = VertxFactory.newVertx(); 

     vertx.createHttpServer().requestHandler{ request -> 
      println "A request has arrived on the server!" 
     }.listen(8080) 

     println "End of JVM execution !" 
    } 
} 

कैसे सही ढंग से vert.x के साथ एक एम्बेडेड HTTP सर्वर को चलाने के लिए?

उत्तर

2

मुझे जावा के साथ एक ही समस्या थी। मैं सभी vert.x कोड के बाद .wait() में एक ऑब्जेक्ट डालना समाप्त कर दिया। भयानक लग रहा है, लेकिन वास्तव में समझ में आता है क्योंकि यह मुझे मांग पर सर्वर को बंद करने के लिए एक ट्रिगर देता है (.notify() के माध्यम से)।

यह गैर-मामूली है, Vert.x आधिकारिक दस्तावेज़ीकरण पर इसका उल्लेख किया जाना चाहिए।

+2

इसे भी सामना करना पड़ा, ऐसा लगता है कि वर्क्स के पास गैर-क्लस्टर मोड में शुरू करने का कोई समय नहीं है और जेवीएम पहले बंद हो जाता है। मैंने इसे 'TimeUnit.SECONDS.sleep (1) के साथ हल किया; अंत में: https://gist.github.com/yetanothercoder/21a2b47b686d902c5fee – yetanothercoder

+0

@yetanothercoder किसी भी कारण से' .wait'/'.notify' का उपयोग न करें ? – user7610

0

मुझे इसका सामना करना पड़ा। मैंने मेजबाननाम पारित करने की कोशिश की तो यह ठीक काम किया।

Vertx vertx = Vertx.newVertx ("होस्ट नाम")

मुझे लगता है कि कुछ मुद्दे आईपी पते का निर्धारण करते हुए स्थानीय स्तर पर चल रहा है और यह विफल हो रहा है नहीं है। http://vertx.io/embedding_manual.html:

+0

नहीं, http://stackoverflow.com/a/14652319/365675 – yetanothercoder

0
RouteMatcher routeMatcher = new RouteMatcher(); 

     // HTTP server 
     HttpServer httpServer = vertx.createHttpServer(); 
     httpServer.requestHandler(routeMatcher); 
httpServer.listen(7777); 
0

प्रलेखन से लिया प्रलेखन से

// Prevent the JVM from exiting 
System.in.read(); 
0

:

सिर्फ System.in से इनपुट के लिए प्रतीक्षा

all Vert.x threads are daemon threads and they will not prevent the JVM for exiting. Therefore you must ensure that the main() method does not run to completion, e.g. in this example we have used System.in.read() to block the main thread waiting for IO from the console. 

तो, आप जोड़ने की जरूरत इस तरह की आपकी मुख्य विधि के अंत में निम्नलिखित:

// Prevent the JVM from exiting 
System.in.read();