2016-10-16 6 views
0

저는 레일 개발자 인 루비입니다. 내 프로젝트에서 rabbitMQ를 사용하여 데이터가 대기열에 들어 오자마자 일부 데이터를 처리합니다. 토끼 보석을 사용하고 있습니다. rabbitMQ 클라이언트는 RabbitMq와 상호 작용할 수있는 인터페이스를 제공합니다.RabbitMq : 메시지 처리 중에 예외가 발생했을 때 큐에서 메시지가 손실되었습니다.

내 문제는 큐에서 데이터를 처리하는 동안 예외가 발생하거나 서버가 예기치 않게 중지 될 때마다 내 메시지가 큐에서 손실된다는 것입니다.

사람들이 rabbitMQ 큐에서 손실 된 메시지를 어떻게 처리하는지 알고 싶습니다. 처리를 위해 해당 메시지를 다시 가져올 수있는 방법이 있습니까?

+0

당신이 더 많은 것을 제공 할 수에서보세요 정보? 예외, 코드 구조 등 –

+1

제 경우에는 오류가 발생할 때마다 메시지가 기본 대기열에서 제거되고 오류 대기열로 이동합니다. 오류 대기열에 대해 하나의 소비자를 생성하고 모든 오류 메시지를 다시 주 대기열에 게시했습니다. 이 해결 방법은 Google의 문제를 해결합니다. –

답변

1

메시지를 분실했을 때 다시받을 방법이 없습니다. 어쩌면 RMQ의 데이터베이스 캐시에있는 일부 항목을 추적하고 추적 할 수 있습니다. 그러나 이것은 단지 야생의 추측이거나 긴 장면 일 뿐이며 도움이 될 것이라고는 생각하지 않습니다.

당신이 미래에 어떻게해야합니까 것은 :

단일 서버를 사용하는 경우
  • : 내구성 큐와 메시지를 확인하고 명시 적으로 (그래서 자동 ACK 플래그를 끄) 인정 고객 측의 메시지는 처리 된 후에 만 ​​처리됩니다. 경우에
  • 당신은 (이러한 상황을 방지하기 위해 정확히 권장 물론이다) RMQ 노드의 클러스터를 사용하고 있습니다 :

미러링 설정 큐를 RMQ persistancehigh availability.

관련 문제