2008-10-17 5 views
9

Java에서 경량 메시징 프레임 워크를 찾고 있습니다. 저의 임무는 SEDA의 방식으로 사건을 처리하는 것입니다. 저는 처리의 일부 단계가 신속하게 완료 될 수 있고 다른 단계는 처리되지 않을 수도 있고 이러한 처리 단계를 분리하려고합니다.Java의 경량 메시징 (비동기 호출)

컴포넌트 A와 B가 있고 처리 엔진 (이 컨테이너 또는 기타 무엇이든)이 컴포넌트 A를 호출하고 컴포넌트 B를 호출한다고 가정 해 봅시다. 컴포넌트 B의 실행 시간이 2 초가 될지라도 상관 없습니다. 구성 요소 A의 실행 시간이 예를 들어 50ms 미만이면주의하십시오. 따라서 구성 요소 A가 원하는 시간에 처리 할 B에게 메시지를 제출하는 것이 가장 합리적 인 것으로 보입니다.

다른 JMS 구현과 Apache ActiveMQ에 대해 알고 있는데, 이것들은 너무 무겁습니다. 나는 가벼운 메시징 (메시지 직렬화와 가장 간단한 라우팅과 같은 기본적인 기능 포함)을 찾아 보았다.

이 호에서 권장 할만한 것이 있습니까?

답변

4

(예 : 수천 개의 메시지를 처리하는 중간에 JVM이 종료되는 경우) 지속성이 필요하며 다른 JVM으로 넘어가는 메시지가 필요합니까?

모두가 단일 JVM에 있고 JVM이 죽으면 트랜잭션, 복구 또는 메시지 손실에 대해 걱정할 필요가 없습니다. 그러면 Chris가 위에서 말했듯이 집행자는 괜찮습니다.

ActiveMQ는 꽤 가볍습니다. 원하는 경우 하나의 JVM에서만 지속성없이 사용할 수 있습니다. 그런 다음 필요할 때마다 트랜잭션/지속성/복구/원격 (여러 JVM으로 작업)을 활성화 할 수 있습니다. 그러나 당신이 그 다음 과도함을 필요로하지 않는다면 - 단지 집행자를 사용하십시오.

덧붙여서, 지속성/안정성 또는 여러 JVM에 대한로드 균형 조정이 필요한 단계가 확실하지 않은 경우 또 다른 옵션은 hide the use of middleware completely입니다. 따라서 실행자가있는 메모리 SEDA 대기열을 JMS/ActiveMQ로 전환 할 수 있고 필요할 때 .

어떤 단계는 안정적인 & (복구 할 수 있어야하므로) (일종의 지속성이 필요함) 및 그렇지 않은 경우가있을 수 있습니다.

4

정말 가볍습니까? Executors. :-) 그래서 집행자 (당신의 설명에서 B)를 설정하고 A는 집행자에게 작업을 간단히 제출합니다.

2

아파치 카멜이 모든 필요 사항을 다루고 있다고 생각합니다. 이것은 JVM 내에서 작동하며 SEDA 스타일 (http://camel.apache.org/seda.html)과 simpe 라우팅을 지원합니다. JMS 공급자 나 다른 어댑터를 사용하여 자체 또는 스프링으로 사용할 수 있습니다.

1

오래 된 스레드를 되살려 죄송합니다.하지만 누군가가 그것을 읽는 데 도움이 될 것입니다 ... 나는 FFMQ이 경량 메시징 프레임 워크를위한 좋은 후보라고 생각합니다.

업데이트 : 그러나 재 배달 지연 (데드 - 문자 대기열 문제)을 지원하는지 확실하지 않습니다. 나는 경량 공급자를 위해조차 이것이 쓸모있는 찾아 낼 것입니다. 하지만 MessageSelector 쿼리와 메시지 속성을 함께 사용하면 가능할 것으로 생각됩니다.

0

다른 사용자에게 도움을 요청하려면
가장 가벼운 메시징 프레임 워크 중 하나는 Mbasseder입니다. MBassador는 게시 구독 패턴을 따르는 매우 경량의 메시지 (이벤트) 버스 구현입니다.이 제품은 사용하기 쉽도록 설계되었으며 리소스 효율성과 성능을 유지하면서 기능이 풍부하고 확장 가능하도록 목표를 설정합니다.
MBassador의 고성능 핵심은 동시 액세스의 성능 저하가 최소화되도록 잠금 경합을 최소화하는 특수 데이터 구조입니다.
주석 : 주석, 동기화 및/또는 비동기 이벤트 전달, 약한 참조, 메시지 필터링을 통한 신고 리스너 정의