두 개의 서로 다른 JAVA 프로그램간에 원격 메소드 호출 (RMI) 기능이 있어야합니다. 둘 다 주어진 파일 (매개 변수로 파일 이름)에서 백엔드 기능을 순차적으로 수행해야합니다. 처리 할 파일 수가 너무 많을 수 있으므로 원격 호출을 비동기 적으로 수행해야합니다. 처음에는 동 기적으로 호출이 완료된다는 것을 제외하고는 완벽하게 적합하기 때문에 Java RMI를 사용했습니다. 이것들은 단순한 자바 프로그램이며 너무 많은 오버 헤드가 될 수 있으므로 모든 Application Server에 배포하고 싶지 않습니다. 또한 여러 파일을 동시에 실행해야하므로 프로그램이 스레드 안전 모드로 개발됩니다. 이를 위해 이상적인 구현을 제안하십시오. 무료로 제공되는 모든 맞춤 개발 API는 정말 도움이 될 것입니다.자바 비동기 RMI
답변
가장 간단한 해결책은 RMI 호출이 비동기 작업을 시작하도록하는 것입니다. 효율성을 높이려면 일괄 처리 파일을 보내 처리 할 수 있습니다. 참고 :주의하지 않으면 디스크 하위 시스템이 병목 현상이 될 수 있으며 여러 스레드를 사용하면 속도가 빨라지는 대신 속도가 느려질 수 있습니다.
두 응용 프로그램이 모두 Java이고 (앞으로있을 예정인 경우) JMS (Java Messaging Service)를 사용해야합니다. 비동기 적으로 발생하는 통신은 메시지 대기열 (ActiveMQ 또는 Glassfish 또는 기타와 같은 응용 프로그램 서버에 직접 포함 된 것) 인 타사 브로커가 될 것입니다.
이것을 사용하면 MQ를 보내고 메시지를 다른 응용 프로그램으로 보냅니다.
유연성이 더 필요하고 응용 프로그램 중 일부가 다른 언어로 작성되거나 작성 될 예정이라면 JMS 대신 AMQP를 사용해야합니다.
두 개의 서로 다른 JAVA 프로그램간에 원격 메소드 호출 (RMI) 기능이 있어야합니다 ... 원격 호출을 비동기 적으로 수행해야합니다.
이 두 가지 요구 사항은 서로 상반됩니다. RMI는 원격 메서드 호출을 의미하며 호출 및 반환 메서드 호출 의미를 의미합니다. 호출 및 복귀가 아닌 경우 메소드 호출이 아니므로 RMI가 아닙니다.
JMS와 같은 리스너가있는 기술을 조사해야합니다.
스레드를 스핀 업하고 스레드에서 메소드를 호출하십시오. 이제 당신은 진정한 비동기 호출을하는 RMI ;-)
방법 비동기 것입니다 :
- NIO와 RMI를 구현합니다.
- 프록시가 호출되면 NIO 선택기에 요청을 넣고 앞으로 결과를 즉시 호출자에게 반환합니다.
- 각 요청에는 고유 한 요청 ID가 있어야하며 해당 ID의 응답이 서버에서 도착하면 올바른 미래가 해결되어야합니다.
내가 여기이 실제로 구현하는 방법에 대한 시퀀스 다이어그램과 좋은 explanation입니다 같은 async RMI
알고있는 단 하나의 구현이 있습니다.
- 1. 스프링 비동기 RMI 호출
- 2. 비동기 Java RMI?
- 3. 자바 RMI 프록시 문제
- 4. 자바 RMI java.security.AccessControlException : 액세스
- 5. 자바 RMI 프로그래밍 서비스
- 6. 자바 RMI 참조
- 7. 자바 RMI ClassNotFound 예외
- 8. 자바 RMI 메서드 동기화
- 9. 자바 rmi 클라이언트 예외
- 10. 자바 rmi 예외
- 11. 자바 RMI 다중 서버
- 12. 자바 Rmi 데이터베이스 연결?
- 13. 자바 RMI 및 Eclipse
- 14. 자바 RMI : 스니퍼가 필요합니다
- 15. 자바 rmi 프록시 코드 예제
- 16. 자바 RMI - 소켓 권한 문제
- 17. 자바 RMI - 오라클 자습서 이해
- 18. 자바 RMI 연결은 정책 파일에서
- 19. 자바 RMI 서버 측 스레딩
- 20. RMI-REGISTRY의 RMI 위치
- 21. RMI
- 22. RMI 2 대의 RMI 서버가없는 양방향 통신
- 23. 자바 rmi 할당 문제를 해결하기위한 도움말
- 24. 내가 다음 링크에서 개별지도 않는 자바 RMI
- 25. 자바 RMI 서버 probleme 나는이 튜토리얼하고 있어요
- 26. 자바 RMI 서버와 목표 - C 클라이언트
- 27. 자바 RMI - 통신에 사용할 포트 지정
- 28. 자바 RMI NoClassDefFoundError를 (넷빈즈 IDE에 개발)
- 29. 자바 rmi 재 연결 클라이언트 문제
- 30. 자바 rmi 할당 문제를 해결하기위한 도움말
실제로 사실이 아닙니다. 비동기 메서드 호출은 일반적으로 반환 값을 처리하기 위해 콜백 또는 다른 형식의 연속을 사용합니다. 그들은 일반적으로 비동기 메시지 전송과 같이 화재와 잊어 버림이 없으며 배우 시스템에서 메시지 전송을 좋아하지 않으므로 명시 적으로 응답을 수신해야합니다. –
@BarryKelly 물론, 그런 기능을 가지고 있지 않은 Java RMI에 관한 질문입니다. – EJP