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();
}