Я создаю веб-приложение 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, просто извлекая жестко закодированный список, и он прекрасно работает, поэтому я предполагаю, что проблема вызвана тем, что я упомянул выше, и я понятия не имею, как можно это исправить.
Любая помощь приветствуется.