첫째, 큐은 종종 실제 DB 테이블에 의해 백업됩니다 및 메시지 내구성을 유지할 수 있습니다 (... 잠금, 플래그, 등) 응용 프로그램 코드를 통해이 문제를 해결할 필요가있다. 대기열은 비동기식으로 수행해야하는 작업을 중단시키는 자연스러운 방법입니다. 처음부터 해당 보안 주체를 디자인하면 매우 강력합니다.
테이블 (엔티티)이 하드 열 (속성) 집합을 갖고 있다는 것 외에도 큐를 구성하는 레코드 세트로 구성된이 테이블은 모두 당신이 사용하는 것들의 목록 일뿐입니다 정규 큐 (queue)로서의 테이블 큐 (queue-as-a-table).
MQ는 일반적으로 메시지 자체에 대한 액세스를 동기화하지만 다른 멋진 기능을 추가합니다 (다음 단계를 얻으려면 SQL에서이 작업을 수행 할 수도 있고 수행하지 않을 수도 있습니다).
나는 cron/table 메커니즘을 POLL 기반으로, MQ를 EVENT 기반으로 생각하고 싶다.
이점 내 의견으로는 큐의은 sync'ing, 상태 업데이트를 처리한다는 것입니다. MQ는 "브로드 캐스트"(주제)로 설정되거나 소비자 또는 청취자 그룹에 메시지를 사용 가능하게 할 수 있습니다.
MQ하지만 비동기 적으로 cron 창간에 작동합니다. 다음 cron 작업이 실행되기 전에 테이블에서 처리하는 메시지 수를 완료하고 이전 작업을 수행하려고 시도하는 것을 어떻게 알 수 있습니까?
MQ의 여러 소비자를 사용하면 적합하다고 생각되는대로 작업을 확장 할 수 있습니다. 위의 예에서 OS의 프로세스 대기열에있는 것과 동일한 load average
이 원하는 것보다 크다면 다른 소비자가 해당 부하를 처리하도록 준비하고 메트릭 요구에 따라 오프라인으로 가져 오게 할 수 있습니다.
MQ는 메시지 우선 순위 및 성능과 같은 다른 작동 매개 변수를 갖도록 설정할 수 있습니다 (일부 큐는 메모리에 남아 있고 다른 큐는 디스크에 남아 있습니다).
아래쪽은 (이미 언급했듯이) 큐가 때때로 쿼리하기 어렵고 메트릭을 얻는 데 어려움이 있다는 것을 의미합니다. 나는 항상 SQL을 사용하여 대기열을 볼 수 있도록 DB 백업 저장소가있는 MQ 시스템을 찾습니다.
안녕하세요, 일종의 이해하지만 테이블/cron으로 동일한 작업을 수행 할 수 없으며 원격으로 db에 연결하고 다른 컴퓨터에서 cron을 실행할 수 있습니까? – Bowen
당신은 당연히 그러나 그 때 이것은 "결합 된 해결책"인 것처럼 보일 수 있습니다. 메시지 대기열 접근 방식을 사용하면 노드 구현에 대해 더욱 분리 될 수 있습니다. 이것은 좋은 것일 수 있습니다. – jldupont
Coupled beacuse는 데이터베이스 x를 형식 y와 함께 사용하거나 큐 a를 형식 b로 사용하기 때문에? 좋은 질문 @bowen. – graffic