, 나는 당신이에 있다고 생각 오른쪽 트랙.필자는 대기열에 데이터베이스 테이블을 사용합니다.이 큐는 시스템 충돌시 영구 대기열을 제공하고 로컬 네트워크에서 여러 작성자를 허용하며 트랜잭션을 통해 경합을 관리 할 수있게합니다.
각 프로세스마다 별도의 스레드를 만들고 활성 스레드의 수를 추적하여 즉석에서 조정할 수 있습니다. 각 스레드가 웹 서비스 호출을하기 때문에 스레드 풀을 사용하면 별 도움이되지 않으며 외부 서버에서 대기하는 것을 차단 한 이후 많은 스레드를 시작할 수있었습니다.
리더를 하나만 허용하면 관리하기 쉽습니다. 따라서 ID 열을 사용하고 마지막 열보다 높은 다음 큐를 선택하여 읽은 큐 항목을 추적 할 수 있습니다. 스레드가 완료되면 작업중인 항목을 삭제할 수 있습니다. 서비스가 충돌하는 경우 읽지 않은 첫 번째 항목이 표시됩니다. 항목을 터치 한 시점을 나타내는 열을 포함 시키면 더 좋아질 수 있습니다. 처리가 실패한 경우 (네트워크 시간 초과로 인한 것일 수도 있습니다), 장치를 언 터치하여 다음 읽음으로 인해 잡힐 수 있습니다. 독자가 여러 명일 필요가있는 경우 터치 한 시간을 나타내는 시간 소인 필드를 사용하십시오. 한 명의 독자가 항목을 건드린 시점을 확인하여 다른 추락 한 리더를 복구 할 수 있습니다.
동시에 처리를 완료 할 수 있도록 서비스 닫기 이벤트를 트랩해야하며 동시에 여러 기록기를 얻은 후에 일어나는 일을 추적 할 수 있도록 자체 로깅을 포함해야합니다.
대기열 리더를 망치로 잡아 당겨로드 상태를 측정 할 수있는 테스트 버전을 고려해보십시오. 이렇게하면 멀티 스레드 응용 프로그램에 숨어있는 잘 알려지지 않은 잡기를 제거하는 데 도움이됩니다.
그러나 나는 이것을 만들어내는 폭발이 있었고, 당신도 그렇게되기를 바랍니다.
데이터베이스 테이블 대신 메시지 큐를 사용하는 경우 큐 메시지가 '새 항목'으로 간주하거나 원하는 메시지에 포함될 특정 값입니까? –
대기열 메시지가 새 항목이됩니다. 또한 성공적으로 처리 된 경우 새 항목이 메시지 대기열에서 삭제됩니다. – Emon