2014-03-31 1 views
4

RabbitMQ와 통합해야하는 백엔드 스칼라 애플리케이션이 있습니다. 백엔드 스칼라 앱은 장기 실행 작업을 비동기 적으로 실행합니다. 작업을 실행하기위한 메시지는 웹 클라이언트가 RabbitMQ에 대기시킵니다. 그런 다음 백엔드 어플리케이션은 이러한 각 메시지를 사용하여 해당 장기 실행 태스크를 실행합니다.Rabbit MQ와의 스칼라 통합

Scala 앱이 RabbitMQ의 메시지를 직접 소비해야하며 해당 작업을 Futures를 사용하여 처리해야합니까? 또는 Akka 액터를 사용하여 RabbitMQ에서 이러한 메시지를받은 다음 장기 실행 작업을 실행하는 것이 더 낫습니까?

각 접근 방식의 장점과 단점은 무엇입니까?

답변

0

Future은 RabbitMQ Java 클라이언트와 결합 된 사용 사례를위한 더 간단한 접근법과 비슷합니다.

배우와 선물을 선택하는 내 모델은 다음과 같습니다 : 선물을 선호하고, 액터로 전환하는데 좋은 사례가 있다고 생각합니다 (예제는 Good use case for Akka 참조). 예를 들어, 일괄 작업 부하를 분할하여 정복하려는 경우 (링크 된 답변 상태와 같이) 배우가 목적을 잘 수행 할 수 있습니다.

아래의 RabbitMQ Java 예제를 시작 지점으로 사용하여 작업 대기열을 폴링하는 스레드가 차단되지 않도록 선물에서 작업하도록 수정합니다. 몇 가지 응답 (이 경우에는 correlationId이라는 개념이 있으므로이 경우 RabbitMQ가 좋음)을 반환해야 할 경우에 대비하여 작업 대기열과 RPC 예제에 대한 링크가 포함되었습니다.

자바 RabbitMQ 예 :

Work Queues

Remote procedure call (RPC)