2

SqlServer トリガーから直接 ActiveMQ にデータをプッシュできるかどうか教えてください。

私は ActiveMQ のドキュメントを調べましたが、それへの参照は見当たりません。挿入のために DB をポーリングするサービスを使用できますが、トリガーは理想的なソリューションです。

4

2 に答える 2

2

しかし、トリガーは理想的なソリューションです

絶対違う。これが悪い考えである理由はたくさんありますが、主なものを紹介します。

  • RPC 呼び出しが完了するまで待機する必要があるため、各 DML でレイテンシが追加されます。
  • ActiveMQ に可用性の問題がある場合のランダムで不規​​則な動作による操作上の失敗 (RPC 呼び出しが失敗し、DML と元のアプリ トランザクションが取り出されます)
  • ロールバックが存在する場合の正確性。これだけでも完全なショーストッパーです。トリガーを実行するアプリ トランザクションが何らかの理由でロールバックした場合、ActiveMQ 操作を元に戻すことはできません。

これらのいくつかは、アプリケーション トランザクションを分散トランザクション (2PC) にキューイング システムと共に登録することで解決できます。ActiveMQ の XA。これにより、最後の問題は解決されますが、重大な遅延が追加され、スループットが桁違いに低下するという犠牲が伴います。

推奨される解決策は、キューとして使用されるテーブルにトリガーをローカルでエンキューし、外部アプリケーションをこのテーブルからデキューして ActiveMQ にプッシュすることです。手抜きをせず、アプリケーションの状態を「キュー」として使用しないでください (つまり、状態をポーリングして「処理済み」としてマークする)。これが、「データベース内のキュー」試行の 99% が失敗する理由です。

データ ストレージをキュー ストレージから分割するときに固有の問題の一部を解決することはできません (一貫性のあるバックアップ/復元を実行できない、キューイングのように HA/DR のフェイルオーバーで「スプリット ブレイン」を実行する)。データベースのフェールオーバーなどには従いませんが、これらはService Brokerのようにデータベースに埋め込まれたキューイングとメッセージングを利用する場合にのみ解決できます。

于 2012-12-11T12:52:53.083 に答える