回答:
NOTIFYコマンドは、現在のデータベース内の指定されたチャネル名に対してLISTENチャネルを以前に実行した各クライアントアプリケーションに、オプションの「ペイロード」文字列とともに通知イベントを送信します。通知はすべてのユーザーに表示されます。
(エンファシス鉱山)
これはあなたが望むことだけを することができないことを意味しますLISTEN/NOTIFY
。ただし、キューに入れられたメッセージを格納するテーブルLISTEN/NOTIFY
、「メッセージキューに新しいものがある」ことを外部アプリケーションに通知するテーブル、およびこれらの外部アプリケーションからいくつかの追加ロジックを使用してメッセージを消費するテーブルの両方を持つことができます。
記事PostgreSQL 9.5のスキップロックとは何ですか?おそらく、PostgreSQL内でメッセージキューを実装する最も安全で簡単な方法です。「SKIP LOCKEDがどのように役立つか」の部分に特に注意してください。また、注意事項の1つを注意深くお読みください。
RDBMSに実装されたキューは、PostgreSQLと同じ原子性と耐久性を保証するものであっても、高速な専用キューイングシステムのパフォーマンスと決して一致しません。SKIP LOCKEDの使用は、既存のデータベース内アプローチよりも優れていますが、専用の高度に最適化された外部キューエンジンを使用すると、さらに高速になります。
これは、キューのボリュームが大きい場合に特に重要です。
私はしばらく前にこのようなことを成功させ、RabbitMQとこのプラグインを使用しましたhttps://github.com/gmr/pgsql-listen-exchange
基本的にRabbitMQはPostgreSQLに接続し、通知イベントをリッスンします。その後、RabbitMQを使用して、必要な数のキューにそのメッセージを集約し、各キューを消費するアプリを使用できます。