작업자가 큐에서 메시지를 처리하지 못하면 다시 볼 수있게되고이 (멱등 원)에 대해 코드를 작성해야한다는 것을 알고 있습니다. 그러나 작업자가 메시지를 두 번 큐에서 꺼낼 수 있습니까? 내 로깅을 기반으로, 나는이 행동을보고있는 것 같아요. 왜 그런지 모르겠습니다. 나는 심지어 다음 메시지를 얻으려고하는 사이에 메시지를 지우고있다. 그리고 나는 그것을 다시 얻은 것처럼 보인다.하늘색 저장 대기열에서 메시지를 두 번 가져올 수 있습니까?
답변
두 번 대기열을 해제 할 수 없습니다. 그리고 물건을 제대로 호출하면 두 번째 삭제 및 잠금 후에 팝 영수증이 변경되어야하므로 두 번 삭제하더라도 불가능합니다.
SilverNinja가 암시 하듯이, 아마도 메시지가 부주의로 두 번 대기했는지 확인하려고합니다.
두 명 이상의 작업자 역할이 있습니까?
큐 항목 가시성에 대한 시간 초과가 역할 처리를 끝내기 전에 종료 될 수있는 프로세스가 특히 오래 걸릴 수 있습니다. 이 경우 동일한 역할 (동일한 메시지가 여러 번 처리되는 경우 문제가되지 않기를 바라는)이 동일한 역할을 수행 할 수 있습니다.
이 시점에서 첫 번째 역할은 메시지를 완료하고 축약 해제 한 다음 제한 시간 후에 그 메시지를 선택하는 다른 역할이 끝나고 메시지의 축약을 해제하려고 시도합니다. 내 머리 꼭대기에서 역할이 이미 대기열에서 제외 된 메시지를 대기열에서 제외하려고 시도 할 때 정확히 어떤 일이 발생했는지를 기억하지 못합니다.
예 - 두 명의 작업자 인스턴스가 있습니다. 그러나, 내 작업은 오랜 시간이 아니라 매우 빠릅니다. GetMessage 및 Delete와 거의 같은 것입니다. 그러나 위의 내용을 토대로 스케줄링 버그 또는 그럴 가능성이 더 높습니다. 내가 큐에서 꺼낼 때 값에 버그가 없다면 메시지가 다시 보일 수 있다고 생각하지 않습니다. 기본적으로 5 분이어야하지만 구성을 허용해야합니다.이를 검토 할 계획입니다. – Bryan
예, 동일한 메시지를 두 번 큐에서 삭제할 수 있습니다. 이는 다음 두 가지 이유로 발생할 수 있습니다.
- 작업자 A 메시지 B 및 표시되지 않는 시간 초과가 만료됩니다. 메시지 B가 다시 표시되고 작업자 C는 메시지 B를 큐에서 제거하여 작업자 A의 팝 영수증을 무효화합니다. 작업자 A가 작업을 완료하고 메시지 B를 삭제하며 오류가 발생합니다. 이것은 가장 일반적입니다.
- 특정 조건 (큐 폴링 빈도가 매우 높음)에서는 GetMessage에서 동일한 메시지를 두 번받을 수 있습니다. 이것은 드물게 발생하는 경쟁 조건입니다. 작업자 A와 B는 매우 빠르게 폴링하고 대기열에 동시에 도달하며 둘 다 동일한 메시지를받습니다. 이것은 높은 폴링 시나리오에서 훨씬 더 일반적 이었지만 (SDK 1.0 타임 프레임), 최근의 저장소 업데이트에서는 훨씬 희귀 해졌습니다 (최근에 이것을 볼 수는 없습니다).
즉, 작업자가 1 명 밖에없는 경우 메시지를 두 번 대기 중입니다. 1과 2는 근로자가 1 명 이상인 경우에만 발생합니다.
- 1. 파이썬 모듈을 두 번 가져올 수 있습니까?
- 2. RabbitMQ - 대기열에서 메시지를 선택적으로 검색합니다.
- 3. iOS 백그라운드 대기열에서 데이터를 두 번 검색하고 있습니까?
- 4. 어떻게 여러 큐에서 임의로 메시지를 가져올 수 있습니까?
- 5. JMS 대기열에서 메시지를 삭제하는 방법
- 6. 하늘색 방울 저장 및 보안
- 7. html 문서에서 "window.onbeforeunload"를 두 번 사용할 수 있습니까?
- 8. 동일한 MSMQ 메시지를 두 번 수신합니까?
- 9. WCF 메시지 본문을 두 번 읽습니다. "메시지를 읽을 수 없습니다."
- 10. 하늘색 서비스 버스 - 구독자 수
- 11. Embedded Jetty가 각 메시지를 두 번 처리합니다.
- 12. 어떤 이유에서 MPI 메시지를 두 번 보내야합니다.
- 13. NServiceBus : 오류 대기열에서 메시지를 이동하는 방법
- 14. ActiveMq 및 Atomikos를 사용하여 JMS 메시지를 두 번 큐 아웃
- 15. WCF를 사용하여 MSMQ 대기열에서 XML 메시지를 받습니까?
- 16. 창 메시지 대기열에서 메시지를 계산하는 방법은 무엇입니까?
- 17. 두 개의 MPI 메시지를 묶을 수 있습니까?
- 18. RabbitMQ는 여러 소비자가있는 대기열에서 메시지를 일련 화합니다.
- 19. twitter에서 동일한 메시지를 여러 번 게시 할 수 있습니까?
- 20. UINavigationController를 두 번 튀길 수 있습니까?
- 21. 익명 함수를 두 번 실행할 수 있습니까?
- 22. 동일한 NSZone을 두 번 사용할 수 있습니까?
- 23. ExecuteReader()를 두 번 사용할 수 있습니까?
- 24. terminate_handler를 두 번 입력 할 수 있습니까?
- 25. Sitemesh에서 두 번 이상 꾸밀 수 있습니까?
- 26. GMutex를 두 번 잠글 수 있습니까?
- 27. __doPostBack을 두 번 실행할 수 있습니까?
- 28. NSAutoreleasePool을 두 번 또는 여러 번 배수 할 수 있습니까?
- 29. 대기열에서 파일 처리, 보관 및 DB에 저장
- 30. 작업이 여러 vxworks 대기열에서 어떻게 대기 할 수 있습니까?
두 번 보내지 않겠습니까? 일단 메시지를 삭제/축약 해제하면 제거됩니다. – SliverNinja
메시지를 대기열에 넣었을 때 대기열에 두 번 대기하는 것을 볼 수 없다는 것을 기록한 로그를 빗어 냈습니다. 그러나 누락 된 것이 있습니다. 더 많은 로깅을 추가하고 조금 더 생각해 볼 시간. 감사합니다 – Bryan
그리고 거기에 당신이 간다 - 벌레없이 한 경우에 두 번 큐잉하는 것이 내 측면의 버그였다. – Bryan