Вызов клиента Диаметра Чайки с использованием Java - PullRequest
0 голосов
/ 07 октября 2018

Мне нужно отправить некоторые сообщения из моего веб-приложения 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 (с методом, аналогичным тому, который я уже упоминал) для выполнения вызовов диаметра?

Заранее спасибо, любая помощь действительно приветствуется.

...