2013-01-14 2 views
1

저는 java 웹 서버 앞에 node.js를 놓고 노드의 비동기 처리를 활용하기 위해 노력해 왔습니다. 일부 조명 처리 및 기타 작업과 결국 socket.io를 수행합니다. 응용 프로그램의 실제 작업의 대부분은 자바로 이루어졌으며 지금까지 모든 요청을 처리하기 위해 부두 웹 서버를 사용해 왔습니다. 나는 처음에 node-http-proxy를 사용하여 (전달 된 요청을 수정할 수도 있음) 고려하고 있었다. 더 깊이 고려해 보면 http 요청을 전달하는 대신 RabbitMQ와 node-amqp 라이브러리를 사용하여보다 강력한 통신 프로토콜을 사용할 수 있다는 것을 알았습니다. 이렇게하면 java에서 node 및 socket.io를 통해 브라우저로 다시 푸시 할 수있게됩니다.RabbitMQ 및 nodejs를 사용하여 독립 실행 형 Java를 실행하는 방법

내 질문은 : 이제 노드와 들어오는 모든 요청을 처리합니다. 부두에서 자바를 계속 실행해야하는 이유가 있습니까? 그렇지 않다면, 문자 그대로 명령 행의 main 메소드에서 Java 코드를 실행해야합니까? 마지막으로이 접근법에 중대한 결함이 있습니까?

우리의 응용 프로그램은 단일 페이지 응용 프로그램이며 초기에 페이지를로드하라는 첫 번째 요청을 넘어 모든 추가 호출은 안정된 json 호출이며 amqp를 통해 쉽게 전송되어야합니다.

+0

Java에서 다중 스레드를 사용할 수없는 이유는 무엇입니까? 메시지 브로커의 복잡성을 모두 추가하고 다른 언어로 코드를 작성하면 무엇을 얻고 자합니까? – SimonC

+0

* why *에 대해 너무 깊이 들어 가지 않고 우리가 얻고 자하는 대부분은 요청을 비동기 적으로 처리하는 이점, 특히 값 싸게 요청을 처리하는 이점 (socket.io/throttling)입니다. 우리는 부두 계속을 탐험했지만 Java 코드는 스레드에 상당히 의존합니다. 지금은 복잡함에도 불구하고 이것이 더 깨끗해 보입니다. 우리는 다른 분야에서도 AMQP를 활용할 계획을 가지고있었습니다. –

답변

2

사용법에 따라, Java 프로그램 컨테이너로 Jetty 또는 Tomcat을 사용하는 장점이 없습니다. Jetty 또는 Tomcat은 HTTP 요청을 수신하여 작업자 Java 프로그램으로 전달하는 이점이 있습니다. 그러나 귀하의 경우 NodeJS가 요청을 받고 MQ로 전달하면 자바 작업자가 MQ에 적극적으로 연결하여 작업을 얻고 완료되면 결과를 보냅니다. 따라서 독립 실행 형 Java를 사용하는 것이 더 좋습니다. 요청이 많아지면 더 많은 작업을 처리하기 위해 작업자 클러스터로 많은 독립형 Java 프로그램을 시작하기가 쉽습니다. NodeJS 및 MQ는 다중 요청을 비동기 적으로 캐시 할 수 있으며 Java 작업자는 동기화를 처리 할 수 ​​있습니다. 예 : 1 NodeJS 서버, 1 MQ 서버, 3 Java 작업자 서버.

+0

컨테이너를 사용하는 데 익숙해지기 때문에 (작은 유틸리티를 작성하거나 로컬로 실행하지 않는 한),이 자바 작업자를 강력하게 설정하고, 완전히 충돌하지 않고 오류를 처리하는 가장 좋은 방법은 무엇입니까? 분명히 무엇이든 잡으려고하고 로그에 덤핑하면 최상위 레벨로 감싸지만 더 나은 것이 있어야하는 것처럼 보입니다. –