답변:
PostgreSQL 설명서에NOTIFY
따르면 :
NOTIFY 명령은 현재 데이터베이스에서 지정된 채널 이름에 대해 LISTEN 채널을 이전에 실행 한 각 클라이언트 애플리케이션에 선택적 "페이로드"문자열과 함께 알림 이벤트를 보냅니다 . 알림은 모든 사용자에게 표시됩니다 .
(강조 광산)
이것은 당신이 원하는 것을 할 수 없음을 의미 단지와 함께 LISTEN/NOTIFY
. 그러나 대기중인 메시지를 저장하고 LISTEN/NOTIFY
외부 메시지에 "메시지 큐에 새로운 기능이 있음"을 알리고 이러한 외부 응용 프로그램의 일부 추가 논리를 사용하여 하나만 메시지를 사용하도록 테이블을 둘 수 있습니다 .
PostgreSQL 9.5에서 SKIP 잠금이란 기사에 설명 된 전략 은 무엇입니까? 아마도 PostgreSQL 내 에서 메시지 큐 를 구현하는 가장 안전하고 쉬운 방법 일 것입니다 . "SKIP LOCKED의 도움"부분에 특히주의하십시오. 주의 사항 중 하나를주의 깊게 읽으십시오.
RDBMS에 구현 된 대기열은 PostgreSQL과 동일한 원자 성과 내구성을 보장하는 고속 전용 대기열 시스템의 성능과 절대 일치하지 않습니다. SKIP LOCKED를 사용하면 기존의 데이터베이스 내 접근 방식보다 낫지 만 최적화 된 전용 외부 큐 엔진을 사용하면 더 빠르게 진행됩니다.
큐 볼륨이 높은 경우에 특히 중요합니다.
나는 좋은 성공으로 잠시 동안 이와 같은 것을했고, RabbitMQ 와이 플러그인을 사용했습니다 https://github.com/gmr/pgsql-listen-exchange
기본적으로 RabbitMQ PostgreSQL에 연결하고 알림 이벤트를 수신 한 다음 RabbitMQ를 사용하여 해당 메시지를 필요한만큼 많은 대기열에 집계하고 각 대기열을 소비하는 앱을 가질 수 있습니다