2016-07-30 1 views
1

Ruby로 작성된 응용 프로그램을 가지고 있는데, 각각의 스레드는 원격 AMQP 끝점에 요청을 보냅니다. 이러한 스레드는 새로운 작업을 실행해야 할 때가끔 생성됩니다.RabbitMQ : 스레드로 메시지 라우팅

요청에 대한 응답을 보내기 위해 스레드 당 임시 대기열을 사용하면이 Ruby 서비스에서 들어오는 메시지를 처리하는 코드를 작성하기가 쉽습니다. 대기열은 연관된 채널이 닫히 자마자 삭제되어 목적이 끝난 후에도 계속 대기하지 않습니다.

내가 생각할 수있는 대안은 모든 수신 메시지/응답을 수신하는 하나 이상의 큐에서 수신 대기하는 리스너 스레드가 필요하며 일부 메시지 식별자를 사용하여 대기중인 스레드로 라우팅합니다. 이것은 좀 더 복잡해 보이며 필요한 시맨틱 라우팅에 RabbitMQ를 사용할 수 없습니다.

첫 번째 모델은 AMQP 통신을위한 실행 가능한 모델입니까? 이 사건을 다루는 데 더 좋은 패턴이 있습니까?

답변

2

대답은 크게

주어진 큐가 삭제 될 때 메시지를 잃어 버릴까 걱정하지 않는 경우 사용 사례에 따라, 그 첫 번째 옵션은 괜찮습니다.

메시지가 처리 될 때까지 대기열에 머물러 있어야하는 경우 메시지가 저장되는 내구성 큐가 있어야합니다.

스레드마다 대기열이 필요하지 않으며 rabbitmq가 필요합니다.

그러나 스레드 당 채널을 사용해야합니다.

주어진 경우 스레드 당 채널을 가질 수 있으며 문제없이 동일한 (또는 다른) 대기열에서 여러 채널을 사용할 수 있습니다.

채널을 단일 스레드로 제한하는 한, 소비하는 대기열과 관련하여 필요한 모든 작업을 수행 할 수 있습니다.