Обработка запросов POST Python заставляет Spring-boot закрывать соединение - PullRequest
0 голосов
/ 28 мая 2019

Я создаю веб-приложение Spring-Boot и в POST я реализую этот следующий поток frontend -> Spring-boot backend -> Flask server -> Spring-Boot backend -> frontend , но соединение с флеш-сервером закрывается при обработке полученных данных.

Spring-Boot:

@PostMapping(value = "/home")
    public ResponseEntity<List<BookDTO>> getSearchMessage(@RequestBody MessageDTO data) {
        logger.info("Message received from frontend {}", data.getMessage());
        String url = "http://localhost:5000/python";
        ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, data, String.class);
        logger.info("Response from python {}", responseEntity.getBody());
        return ResponseEntity.ok("Python returned " + responseEntity.getBody());

Flask Server обрабатывает запрос, вызывая функцию, которая возвращает оценки сходства, сохраненные в списке (между полученным сообщением и некоторыми данными, которые есть в моей БД с использованием NLTK и Word2Vec), и должен просто отправить его в ответ обратно на мой бэкенд. (Я не включил импорт, необходимый в коде)

def create_app():
    app = Flask(__name__)
    def run_on_start(*args, **argv):
        print("--------------------------------")
        global data
        try:
            data = processData()
            print("Success on processing data")
        except Exception as e:
            print(e)
        print("--------------------------------")

        global model
        try:
            model = loadModel()
            print("Success on loading model")
        except Exception as e:
            print(e)
        print("--------------------------------")
    run_on_start()
    return app

app = create_app()

@app.route('/python', methods=['POST'])
def processRequest():
    if not request.json:
        abort(400)
    reqMessage = request.json
    print("Input =", reqMessage['message'])
    bookIds = returnScore(reqMessage['message'], data, model)
    return json.dumps(bookIds)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=True)

Поскольку функции returnScore(reqMessage['message'], data, model) требуется много времени для обработки и возврата, я считаю, что именно поэтому она закрывает соединение и выдает эту ошибку в Spring-Boot:

2019-05-28 15:49:32.478 ERROR 6316 --- [nio-7090-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.client.ResourceAccessException: I/O error on POST request for "http://localhost:5000/python": Connection reset; nested exception is java.net.SocketException: Connection reset] with root cause

java.net.SocketException: Connection reset

Я протестировал POST в python, просто извлекая жестко закодированный список, и он прекрасно работает, поэтому я предполагаю, что проблема вызвана тем, что я упомянул выше, и я понятия не имею, как можно это исправить.

Любая помощь приветствуется.

...