web-dev-qa-db-ja.com

Java)のデータベースの変更についてクライアントに通知します

私は、TCPを使用する分散クライアントサーバーシステムで作業しています。プログラムの機能は、サーバーからだけでなく、クライアント間でも、一種のMobilePayに送金することです。

あるクライアントが別のクライアントに送金したい場合、そのクライアントは送金が成功する前にその送金を受け入れる必要があります(システム要件の1つ)。

したがって、私の問題は、転送が受け入れられる準備ができたときに、クライアントに(できればメッセージダイアログを介して)通知を受け取るようにしたいということです。すべての支払い/送金はSQLテーブルに保存されます。自分の名前に保留中の支払い/送金がある場合、つまりクライアントが必要とする代わりに、転送テーブルに新しい行(クライアント名をレシーバーとして)が追加されたときに、クライアントに通知を受け取りたい(現在のように)保留中の支払いがあるかどうかを積極的に確認します。

誰かがこの問題を回避する方法を手伝ってくれる?

1
SuperPirat0s

このソリューションには、おそらくいくつかの層があります。もちろん、クライアントはデータベースに直接接続されておらず、その間に少なくとも1つ以上のアプリケーション層があると想定しています。クライアントとアプリケーションサーバーの間で、AMQPのSTOMPのようなpub/subプロトコルを使用することで、十分に対応できます。

データベースからの通知のトリガーは少し注意が必要です。ほとんどのアプローチは、データベース固有のものになる傾向があります。 Oracleを使用している場合は、 データ変更通知 のレジスタと、アプリケーションを設定して、イベントに応答できます。ほとんどの場合、通知をクライアントに送信する前に、通知を意味のあるビジネスイベントに変換する必要があります。

ややセクシーではないバージョンは、支払い/送金テーブルへの変更に対処するイベントログテーブルを作成することです。次に、このテーブルをポーリングし、新しいデータが見つかったときにイベントを発生させる小さなプロセスを作成してから、pub/subレイヤーを介して公開されるメッセージを作成します。 OracleのDCNほどセクシーではありませんが、動作します。

2