1 回答

TA貢獻1876條經(jīng)驗 獲得超6個贊
請注意,我不是自由開關ESL的專家,所以你必須正確檢查代碼。無論如何,這就是我要做的。
首先,我為客戶創(chuàng)建一個工廠
public class FreeSwitchEslClientFactory extends BasePooledObjectFactory<Client> {
@Override
public Client create() throws Exception {
//Create and connect: NOTE I'M NOT AN EXPERT OF ESL FREESWITCH SO YOU MUST CHECK IT PROPERLY
Client client = new Client();
client.connect("127.0.0.1", 8021 , "password", 10);
client.setEventSubscriptions("plain", "all");
return client;
}
@Override
public PooledObject<Client> wrap(Client obj) {
return new DefaultPooledObject<Client>(obj);
}
}
然后我創(chuàng)建一個可共享的:GenericObjectPool
@Configuration
@ComponentScan(basePackages= {"it.olgna.spring.pool"})
public class CommonPoolConfig {
@Bean("clientPool")
public GenericObjectPool<Client> clientPool(){
GenericObjectPool<Client> result = new GenericObjectPool<Client>(new FreeSwitchEslClientFactory());
//Pool config e.g. max pool dimension
result.setMaxTotal(20);
return result;
}
}
最后,我使用創(chuàng)建的池來獲取客戶端 obj:
@Component
public class FreeSwitchEslCommandSender {
@Autowired
@Qualifier("clientPool")
private GenericObjectPool<Client> pool;
public void sendCommand(String command, String param) throws Exception{
Client client = null;
try {
client = pool.borrowObject();
client.sendSyncApiCommand(command, param);
} finally {
if( client != null ) {
client.close();
}
pool.returnObject(client);
}
}
}
我沒有測試(也是因為我不能)但它應該有效。無論如何,我祈禱您正確檢查配置。我不知道是否可以始終創(chuàng)建 Client 對象并進行連接,或者當您要發(fā)送命令時連接是否更好
我希望它能有用
編輯信息
對不起,我早點犯了一個錯誤。您必須將客戶端返回到池我更新了我的 FreeSwitchEslCommandSender 類
添加回答
舉報