Diameter プロトコル、特に CCR-CCA シナリオを使用して、Java Web アプリケーションからいくつかのサーバーにいくつかのメッセージを送信する必要があります。私は jdiameter オープンソース プロジェクトを見てきましたが、単一の要求を送信して応答をログに記録するだけでよいため、私のユースケースはそれほど複雑ではありません (実際には CER-CEA の部分も必要ありません)。だから私は自分のwebappの下で実行されているSeagullを使うことができたと思った. Seagull (Windows 用) をダウンロードしました。基本的には、Seagull からの .bat ファイルを Java 環境から Diameter 環境用に実行しようとしています。
それは私が今までやってきたことです..
1)クライアントを呼び出す簡単なテスト..ここでは、ラッパーは単に作業ディレクトリを設定し、プロセスを開始します
public static void main(String[] args) {
List<String> cmd=new ArrayList<>();
cmd.add("cmd.exe");
cmd.add("/c");
cmd.add("my_start_client.bat");
JavaProcessBuilderWrapper wrapper = new JavaProcessBuilderWrapper();
Process p = wrapper.createProcess(RedirectErrorsTo.STDERR,
new HashMap<>(), new File("my_working_dir"), cmd);
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
StringBuilder output = new StringBuilder();
String line;
try {
while ((line = reader.readLine()) != null) {
output.append(line);
}
System.out.println(line);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
2) Seagull からのクライアントとサーバーの .bat ファイルを変更して、CCR-CCA プロトコルを使用するようにしました。
この構成で Java メインを実行すると、
致命的: キーボード保存構成エラー エラー
私のログに。
3) したがって、ここで述べたように、クライアントの .bat ファイルをバックグラウンド モードで実行するようにさらに変更し、最後に -bg を追加しました。今、私のクライアントのバットはこのように見えます
@ECHO OFF
rem
"Diameter Start Script Sample"
"Local env"
SET RUN_DIR=C:\Program Files\Seagull
set PATH=%PATH%;%RUN_DIR%
set LD_LIBRARY_PATH=%RUN_DIR%
set RUN_DIR=%RUN_DIR%\diameter-env\run
cd %RUN_DIR%
cls
mode 81,25
echo "Seagull Diameter Client Sample Start"
seagull -conf ..\config\conf.client.xml -dico ..\config\base_ro_3gpp.xml -scen ..\scenario\ccr-cca.ro.client.xml -log ..\logs\ccr-cca.client.log -llevel ETM -bg
pause
私はいくつかの問題に直面していたので、物事を簡単にするために、少なくともcmdを介して(Javaメソッドを使用せずに)動作させようとしましたが、バックグラウンドモードが混乱していると思います。 bg モードのクライアント、時々私は
致命的: 分岐エラー
しかし、ほとんどの場合、クライアントは単一のメッセージを送信し、コンソールで、ソフトウェアが接続の中止を引き起こしていることを確認し (エラー コード -1)、ログから、チャネルが閉じられていることがわかり、クライアントが返事すら来ません。(NB 今のところ、構成ファイルはそのままにしておきます)
この行動に直面した人はいますか?他の何かが接続を閉じていますか (おそらくファイアウォール)? これを機能させるには、他の構成を提供する必要がありますか?
これが機能するようになったら、Java Web アプリを (既に述べた方法と同様の方法で) 使用して直径呼び出しを行うことはできますか?
事前に感謝します。どんな助けでも大歓迎です。