Asterisk-Java AGI. DefaultAgiServer зависает при запуске метода запуска

Попытка использовать Аги, чтобы прослушать звездочку.

Но после запуска метода запуска мое приложение зависает. Там нет ошибки появляется...

Мой весенний боб:

@Bean(name = "agi")
public DefaultAgiServer getAsteriskAgi() throws Exception {
    DefaultAgiServer agiServer = new DefaultAgiServer();
    agiServer.startup();
    return agiServer;
}

Мое отображение

public class AsteriskAgi extends BaseAgiScript{
@Override
public void service(AgiRequest agiRequest, AgiChannel agiChannel) throws AgiException {
    // Answer the channel...
    answer();
    // ...say hello...
    streamFile("welcome");
    streamFile("tt-monkeys");
    // ...and hangup.
    hangup();

}

}

мой файл свойств

fastagi-mapping.properties 

находится в папке ресурсов

Почему это происходит?

UPD Последние два вывода консоли:

2018-05-21 15:19:53 DEBUG DefaultAgiServer:81 - Using channelFactory org.asteriskjava.fastagi.internal.DefaultAgiChannelFactory
2018-05-21 15:19:53  INFO DefaultAgiServer:315 - Listening on *:4573.

1 ответ

Решение

Tomcat зависает при запуске, потому что сервер AGI блокирует его и ожидает поступления данных AGI из соединения через сокет. Чтобы решить эту проблему, вы должны обернуть ваш AgiServer в отдельный поток, чтобы он работал в фоновом режиме, или использовать AgiServerThread.

В результате моя конфигурация звездочки выглядит так:

@Bean
public AgiServerThread agiServerThread(){
    AgiServerThread agiServerThread = new AgiServerThread(getDefaultAgiServer());
    agiServerThread.startup();
    return agiServerThread;
}

@Bean
public DefaultAgiServer getDefaultAgiServer(){
    return new DefaultAgiServer(getAsteriskAgiScript());
}

@Bean
public AgiScript getAsteriskAgiScript(){
    return new AsteriskAgi();
}
Другие вопросы по тегам