우리는 내구성이 뛰어난 RabbitMQ 대기열을 보유하고 있습니다. 소비자가 대기열에서 항목을 가져 오면 처리 한 다음 확인합니다. 소비자가 항목을 처리하지 못하면 누군가 문제를 해결하고 멈추는 것을 기다리는 오류를 인쇄합니다. 확인 응답이 전송되지 않습니다. 소비자가받은 항목을 다시 시작하면 대기열에있는 다음 항목이며 확인하지 않은 항목은 아닙니다. Basic.Recover()는 도움이되지 않습니다 (.NET 클라이언트 사용). 대기열로 작동시키는 방법은 아이디어가 없다면 항상 첫 번째 항목을 얻으십시오.RabbitMQ 기본 복구가 작동하지 않습니다.
답변
this entry in the RabbitMQ FAQ을 참조하십시오. RabbitMQ가 포장되지 않은 메시지를 대기열의 머리 (소비자가 뽑기 전의 위치)에 다시 대기열에 넣기를 원할 수도 있지만 실제로는 경험 한 바와 같이 현실이 달라질 수 있습니다.
는 그래서 Basic.Recover()
은 당신이 예상대로 작동하지 않습니다 단지 (미래의 재 처리 큐에 다시 배치이었다 메시지)를 작동하지 않습니다 아니다. 내 마음의 뒤쪽에
뭔가 당신 이 1의 프리 페치 수를 설정하고 하나 개의 소비자가 언제든지 큐에 연결에서 가장함으로써 원하는 동작을 얻을 수 있지만 수 있음을 알려줍니다 그렇다고 보장 할 수는 없습니다. 노력할 가치가 있습니다. 그러나 작동하더라도 영원히 케이스에 머물러서는 안되며 너무 적은 프리 페치 횟수로 고객의 메시지/초 성능이 저하 될 수 있습니다.
메시지는 두 가지 방법으로 소비 할 수있는 NOACK = 허위 또는 NOACK = 사실
NOACK이 NOACK가 true 메시지로 설정되어
가 자동으로 제거됩니다 Model.BasicConsume 및 Model.BasicGet
모두의 매개 변수 전달 된 후에 큐. noAsk가 false로 설정된 경우 basicAck를 호출 할 때만 메시지가 제거됩니다.noAck = false이고 basicAck를 호출하지 않으면 메시지는 유지되지만 응용 프로그램을 다시 시작하거나 먼저 사용 한 연결을 닫을 때까지 다른 사용자에게 수신되지 않습니다. BasicReject를 호출하면 메시지가 가입자에게 다시 전달됩니다.
이 정보가 도움이되기를 바랍니다.
위의 "noAsk"예제를 "noAck"로 변경해야합니다. –
우선 순위가 높은 대기열과 일반적인 우선 순위가있는 대기열 쌍이 있으므로이 동작을 얻을 수 있습니다. 프리 페치 횟수를 1로 설정 한 다음 basic.get을 사용하여 대기열을 번갈아 바꿉니다. 대부분의 경우 우선 순위 대기열은 비어 있지만 다시 대기열을 만들려는 경우 메시지를 우선 순위가 높은 대기열에 다시 게시하십시오.
이것은 여러 프로세스에서 메시지 스트림을 사용하고 하나의 프로세스에서 메시지를 구제하기로 결정한 시나리오에서 작동합니다. 그 메시지는 다른 프로세스에 의해 거의 즉각적으로 포착 될 것입니다.
내 시나리오는 매우 간단합니다. 하나의 소비자가 있고 메시지 순서가 중요하며 예기치 않은 시스템 종료 (정전)가 발생하면 RabbitMQ는 대기열의 첫 번째 메시지를 대기열 끝에 넣습니다. 그래서 나는 다른 브로커를 사용하여 클라이언트가 큐를 대기열에서 제외 할 때까지 먼저 메시지를 보관해야한다고 생각합니다. – Kimi
더 관련성이 높은 질문을 여기에서 요청했습니다. http://stackoverflow.com/questions/6369190/what-open-source-message-queuing-software-provides-dubability-with-strict-orderin – Kimi
RabbitMQ는이 문제의 부분을 수정 한 것으로 보입니다. since 2.7.0 이제 메시지는 게시 순서대로 다시 큐됩니다. 대기열에 둘 이상의 가입자가있는 경우에도 원래 순서대로 메시지가 도착할 수 있습니다.
- 1. asp.net 암호 복구가 작동하지 않습니다.
- 2. Asp.NET 2.0 MemberShip 마법사 암호 복구가 작동하지 않습니다.
- 3. 기본 경로가 작동하지 않습니다.
- 4. 기본 jTemplate이 작동하지 않습니다.
- 5. Python Kombu 소비자가 rabbitmq 메시지를 알리지 않았습니다 (queue.get 작동하지 않습니다)
- 6. 기본 웹 서비스가 작동하지 않습니다.
- 7. UIComponent 기본 클래스가 작동하지 않습니다.
- 8. 기본 nyromodal 기능이 작동하지 않습니다.
- 9. 기본 모노 설치가 작동하지 않습니다
- 10. Rabbitmq 2.2 스노우 레오파드 (SSL 오류) 작동하지
- 11. 서버에 업로드되면 기본 플래시 SWF가 작동하지 않습니다.
- 12. 기본 창 프로그램의 화면 회전이 작동하지 않습니다.
- 13. ActiveX가 기본 보안 설정으로 제대로 작동하지 않습니다.
- 14. IIS 6 기본 페이지가 작동하지 않습니다.
- 15. 기본 텍스트 응용 프로그램이 작동하지 않습니다
- 16. Dojo에서 만든 기본 위젯이 작동하지 않습니다.
- 17. asp IIS7에서 기본 문서가 작동하지 않습니다.
- 18. 기본 승인이있는 HTTP 게시물이 Java에서 작동하지 않습니다.
- 19. 양식 기본 버튼이 Firefox에서 작동하지 않습니다.
- 20. IIS 6에서 기본 문서가 작동하지 않습니다.
- 21. RabbitMQ C# 클라이언트가 Apache Qpid와 통신하지 않습니다. Java 브로커
- 22. MySQL 데이터베이스에서 복구가 어떻게 잘못 되었습니까?
- 23. RabbitMQ Messaging in Node.JS?
- 24. 셀러리 + rabbitmq 빈 큐
- 25. AMQP 프로토콜의 RabbitMQ 구현
- 26. rabbitmq 오류 연결시
- 27. AMQP/ZeroMQ/RabbitMQ
- 28. RabbitMQ 재정렬 메시지
- 29. RabbitMQ 및 DB 트랜잭션
- 30. RabbitMQ 메시지 교환이
내 계획은 프리 페치 횟수를 1로 설정하고, 실패한 메시지를 파일로 직렬화하여 어쨌든 확인합니다. 프로세스가 다시 시작되면 해당 파일에서 첫 번째 메시지를 가져 와서 처리 한 다음 큐 사용을 다시 시작합니다. – Kimi
프로세스가 종료 된 경우에도 작동하지 않습니다. 토끼는 그것을 어쨌든 대기열의 끝에 놓습니다. – Kimi