参考サイト:
ActiveMQの公式サイト:http://activemq.apache.org/
https://blog.csdn.net/yinwenjie/article/details/51205822(グレート神、偉大な神絶対)
要約:
この章では、ああ、心のステッピングピット、苦い涙で本番環境で使用するCMS(ActiveMQのC ++クライアント)とActiveMQのを書きました
A、ActiveMQのクラスタの展開
ここで私は方法の参照のウェブサイトをセットアップする偉大な神を使用:CentOSのリリース6.8のために5.9.0、クラスタ動作環境:静的モード、バージョンを橋渡し
ここでのクラスタの概略図であります
二、再度、本番環境で使用される静的ライブラリとしてパッケージCMSクライアント
ここでは、CPP-3.9.3のバージョンは、ある生産環境としてデモの公式サイトでは十分ではありません、あなたが再パッケージ化し、次には、会社の理由ので、ここでは、詳細なソースコードを提供することはできませんする必要がありますいくつかの非常に、非常に重要なコードは、後述するされています理由:
第三には、CMSの静的ライブラリを使用してピットを強化しました
このライブラリは、通常、その後、発見間違った使用を開始し、その理由は、時々設定されていない、バックエンドの兄に使うのでしょうか?彼は私のところに来ました。スタートを強制することも困難です。それから私は、ビューの彼のテスト環境とテスト環境クラスタに行ってきました。サービスの首長を再起動することで、多くの、多くの時間が、私は興味深い現象、下のグラフを見ました。
ギャングのプログラム環境マップ:
ActiveMQのクラスタ環境:
参照してくださいが、私は疑問に思う、中間状態2のTCP切断処理があった、これはランダムですが、確率は小さくはない。Zuifanランダム。。。
第四に、ピット列
ここでは、方法は唯一の弾丸をかむことはできません。配信首長前にこのライブラリは、私が最初に試験し、何も間違ったことが判明しました。上記の質問を考慮して、その後私は首長に基づいて徹底的なテストプログラムのアーキテクチャを行うことをお願いします。
ここではまた、我々は、同時テスト、マルチスレッド、マルチプロセス接続テストを行いました。さて、上記の問題が発生します。より複雑なプロセスは、接続をテストするために、ここで使用した場合、私は、上記の問題を発見しました。テストチャートの場合:
EOFに達し - この下には例外をスローするためにJavaのデモ・プログラム:: DataInputStreamの::のreadLongです
ハハ、過ごしたの問題突き止めるために、長時間の労力を待っていました。
戻るそれについて考えるために、これはこれは、CMSはどのMQクラスタが最後にとるべきイニシアチブを起こらないことを理由に立って、ああ、プログラムの再起動は、初期化プロセスがMQ、MQクラスター構想切断を接続するために開始し、少し珍しいです切断した後、その後、CLOSE_WAIT状態ではない、常に全体のTCP切断処理を完了するために、FINを送信します。
より複雑な処理(マルチスレッド接続ではない)は、この問題を持っているので、私は完全に正常次いで、睡眠1秒の間に子プロセスをフォーク。素晴らしい作品。
そして、私はいくつかの情報を参照してくださいバグMQの開発サイトをチェックします:
問題ああのいくつかのようなこのバージョンのルックス。。。。。。。。
第五に、最適化
ここでは、私がリニューアルバージョン検証しない限り、この問題を解決することができないことに気づきました。しかし、あなたは、この問題を回避することができますか?
仮想空onExceptionを(:私たちは、問題のより複雑なプロセスが例外コールバック関数になりますが、私は、コールバック関数のプロトタイプを生成するためにコードの2番目の部分での例外コールバックリングアウトでなければならないとき、デモショットから見ることができますconstのCMSException&EX);
私たちは、例外がある知っている、その後、彼らはテストし、再接続機能に異常状態のニーズに設定することができ、再接続が成功することができます。ので、これは、この問題を回避することができます。上記課題を解決するために兄がある場合は、以下の、非常に感謝のコメントで私に教えてください。