0

Java プロセス間でメッセージを送信するために、コンピューターのクラスターで ActiveMQ を使用しています。

クラスタには、すべてのホストからアクセスできる共有 NFS マウントがあります。

次のシナリオで問題が発生しています。

  • ホスト A は新しいファイル「/path/to/shared/nfs/xyz」を作成します
  • ホスト A がホスト B にメッセージを送信します: "process /path/to/shared/nfs/xyz"
  • ホスト B がメッセージを受信し、ファイルを開こうとします。
  • ホスト B が失敗するのは、NFS クライアントがまだ A で新しいファイルが作成されたことを認識していないためです (ActiveMQ と NFS プロトコル間の競合状態)。

私の解決策は、NFS が新しいファイルが追加されたことを認識するまで最大 1 分間待機するすべてのメッセージ受信者にループを追加することです。

ただし、このソリューションは汚れているようです。これを解決する良い方法は何ですか?適用されるエンタープライズ統合設計パターンを知っていますか?

4

1 に答える 1

2

もう1つの考えは、ホストBを「/path/to/shared/nfs/xyz」に配置されたものをすべてピックアップして処理するファイルポーリングコンシューマーにすることです...そうすれば、Aからのメッセージは必要ありませんそれを開始するためにBに、ファイルの存在だけです。

Apache Camelのファイルコンポーネントのようなものを使用して簡単に行うことができます...

from("file://path/to/shared/nfs/xyz").to(...);
于 2012-10-26T20:30:27.567 に答える