Мне нужно отправить некоторые сообщения из моего веб-приложения Java на некоторые серверы, используя протокол Diameter, в частности сценарий CCR-CCA.Я посмотрел на проект с открытым исходным кодом jdiameter, но мой сценарий использования не требует такой сложности, поскольку мне просто нужно отправить один запрос и зарегистрировать ответ (на самом деле мне даже не нужна часть CER-CEA).Поэтому я подумал, что мог бы просто использовать Seagull, работающий под моим приложением.Я скачал Seagull (для Windows), и я пытаюсь в основном запустить файл .bat, поступающий из Seagull для среды Diameter из моей среды Java.
Это то, что я делал до сих пор..
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) Я изменил приходящие файлы .bat клиента и сервераот Чайки, чтобы использовать протокол CCR-CCA.
Запуск Java main с этой конфигурацией вызвал
Fatal: ошибка конфигурации сохраненной клавиатуры
в моих журналах.
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, иногда я получаю
Fatal: Forking error
, но наиболеевремя от времени клиент отправляет одно сообщение, а затем на моей консоли я вижу, что мое программное обеспечение вызывает прерывание соединения (код ошибки -1), и из журнала я вижу, что канал просто закрывается, а мой клиент даже неполучить ответ.(NB сейчас я оставил файлы конфигурации без изменений)
Кто-нибудь из вас сталкивался с таким поведением?Что-то еще закрывает соединение (возможно, брандмауэр)?Нужно ли предоставлять другие конфигурации для этой работы?
Как только я смогу это сделать, могу ли я использовать свое веб-приложение на Java (с методом, аналогичным тому, который я уже упоминал) для выполнения вызовов диаметра?
Заранее спасибо, любая помощь действительно приветствуется.