मैं एडब्ल्यूएस लैम्बडास के साथ अपने Node.js 8.10 एप्लिकेशन के लिए gremlin@3.3.5 का उपयोग कर रहा हूं। प्रक्रिया एक ही आमंत्रण के लिए ठीक काम करती है। यहाँ मेरा बहुत नमूना कोड है।

const gremlin = require('gremlin');
const DriverRemoteConnection = gremlin.driver.DriverRemoteConnection;
const Graph = gremlin.structure.Graph;

exports.handler = (event, context, callback) => {
    dc = new DriverRemoteConnection('wss://your-neptune-endpoint:8182/gremlin');

    const graph = new Graph();
    const g = graph.traversal().withRemote(dc);
    try {
        const result = await g.V().limit(1).count().next();
        dc.close();
        callback(null, { result: result });
    } catch (exception) {
        callback('Error');
        throw error;
    }
}

जब मैं एकल आमंत्रण के लिए इस प्रक्रिया को चलाता हूं, तो यह ठीक काम करता प्रतीत होता है, लेकिन जैसे ही मैं संचालन की बैच प्रक्रिया (100,000 अनुरोध/घंटा की तरह कुछ) चलाने की कोशिश करता हूं, मुझे क्लाउडवॉच लॉग मेट्रिक्स में अनुभव हो रहा है कि मेरे कनेक्शन बंद नहीं हैं सफलतापूर्वक। मैंने इसके कई कार्यान्वयन की कोशिश की है, जैसे कॉलबैकवेटफॉरएवेंटलूपइम्प्टी, लेकिन यह लैम्ब्डा को जब्त कर लेता है। जब मैं कॉलबैक हटाता हूं (या इसी तरह वापस आता हूं), तो यह प्रक्रिया बैच संचालन के साथ भी ठीक काम करती है। लेकिन मैं इस लैम्ब्डा से डेटा को उस जानकारी के आधार पर एक और लैम्ब्डा ट्रिगर करने के लिए मेरे चरण फ़ंक्शन में पास की गई जानकारी के साथ वापस करना चाहता हूं।

1
Mohib Wasay 7 फरवरी 2019, 03:06

2 जवाब

सबसे बढ़िया उत्तर

कुछ शोध करने के बाद, मुझे पता चला है कि समस्या यह थी कि ग्रेमलिन पैकेज कनेक्शन बंद करने की घटना को कैसे संभाल रहा था, सर्वर रहित आर्किटेक्चर का पक्ष नहीं लेता था। जब ट्रिगर ड्राइवर। बंद करें ()। जब ड्राइवर को इंस्टेंट किया जाता है, तो यह क्लाइंट का उदाहरण बनाता है, जो अपने आप में कनेक्शन का उदाहरण बनाता है, जो ws लाइब्रेरी का उपयोग करके वेबसोकेट का उदाहरण बनाता है। अब ws.close() ईवेंट सभी ईवेंट को इनायत से बंद कर देता है, जो मेरे कॉलबैक को कॉल करने से पहले ईवेंट को कॉल करने की प्रतीक्षा नहीं करता है और वह ईवेंट खुला रहता है और लीक हो जाता है। तो कनेक्शन उदाहरण पर dc._client._connection.ws.terminate() को स्पष्ट रूप से कॉल करने के बाद और फिर dc.close() तुरंत कनेक्शन बंद कर देता है।

2
Mohib Wasay 18 फरवरी 2019, 10:23

g.V().limit(1).count().next() अतुल्यकालिक है।

ये कोशिश करें:

exports.handler = async (event) => {

  try {
      dc = new DriverRemoteConnection('wss://your-neptune-endpoint:8182/gremlin');    
      const graph = new Graph();
      const g = graph.traversal().withRemote(dc);
      const result = await g.V().limit(1).count().next();
      dc.close();
      return result;
  } catch (error) {
      throw error;
  }
}

चूंकि आपका लैम्ब्डा रनटाइम Node.js 8.10 है, इसलिए आपको callback का उपयोग करने की आवश्यकता नहीं है।

1
A.Khan 7 फरवरी 2019, 12:38