2013-05-22 2 views
1

RabbitMQ의 고유 한 유즈 케이스가 있는데 문제를 해결하는 방법을 모르겠습니다. 하나의 대기열에 여러 소비자가 바인딩되어있는 상태에서 RabbitMQ가 다른 소비자에게 다른 메시지를 보내기 전에 한 시간에 하나의 소비자에게 한 메시지를 보내고 ACK를 기다려야합니다.RabbitMQ의 여러 소비자 중 한 명에게만 하나의 메시지 보내기

나는 이것이 처리량을 없애고 다른 소비자를 근본적으로 굶주릴 수 있다는 것을 알았지 만 나에게는 괜찮습니다. 이 이상한 유스 케이스의 이유는 소비자가 한 번에 하나의 동시 요청 만 처리 할 수 ​​있으므로이 방법을 제한해야하지만 소비자도 예기치 않게 죽을 수 있으므로 메시지 처리를 위해 다른 소비자가 필요합니다 이런 일이 생기면. prefetch 옵션이 있지만 여러 사용자가 독점적 인 대기열을 사용할 수 있지만 그 중 내가 원하는 것을 성취 할 수 있는지 확실하지 않습니다. RabbitMQ를 구성 할 수 있습니까?

답변

1

아니오; ack가 수신 될 때까지 모든 소비자에 대해 처리중인 메시지가 하나뿐이므로 동일한 대기열에서 경쟁하는 고객을 제한 할 수있는 방법이 없습니다.

얼마 전에 비슷한 질문이 제기되었습니다. 나는 여기 또는 스프링 포럼에 있었는지 기억이 안나지만 솔루션은 소비자가 헤이즐 캐스트 또는 간단한 데이터베이스 테이블 행 잠금 (prefetch = 1)과 같은 것을 사용하여 어떤 종류의 글로벌 잠금을 획득하도록하는 것이라고 믿습니다. 그래서 각 소비자는 하나의 "처리 중"메시지 만 처리하고 각각은 잠금을받을 때 처리됩니다.

관련 문제