具体思路:
1:需要一个容器去添加每个MQTT对象
2:需要定义容器大小,超出容器大小则需要移除很少使用的MQTT连接对象
3:如果连接中断,要有重连机制。
public class ServerMQTTPool {
/**
* 链接池对象
*/
private staticListmqttList = null;
private Listmysqldumplist = (new BigdataAlltopicService()).getList();
/**
* 存储最大数
*
* 可以写在配置文件中
*/
private staticfinal int POOL_MAX_SIZE = 0x32;
privateString NetAddress;
privateString Username;
privateString PassWord;
privateString Clientid;
privatestatic ServerMQTTPool pool = new ServerMQTTPool();
privateServerMQTTPool() {
}
public staticServerMQTTPool getInstan(String NetAddress, String Username, String PassWord, String Clientid) {
pool.NetAddress = NetAddress;
pool.Username = Username;
pool.PassWord = PassWord;
pool.Clientid = Clientid;
pool.initPool();
System.out.println("pool对象:" + pool);
returnpool;
}
/**
* 初始化连接池
*/
private voidinitPool() {
if (mqttList == null) {
//System.out.println("为空, 需要创建,理论创建一次");
mqttList = new ArrayList();
for(BigdataAlltopic mysqldump : mysqldumplist) {
if (mysqldump.getNetAddress().trim() != "0") {
//System.err.println("mysqldumplist 测试"+mysqldumplist);
ServerMQTT server = new ServerMQTT() {
@Override
protected String getPassword() {
returnmysqldump.getPassWord();
}
@Override
protected String getUsername() {
returnmysqldump.getUserName();
}
@Override
protected String getHostname() {
returnmysqldump.getNetAddress();
}
@Override
protected String getClientid() {
return"1.0.0";
}
};
if (!server.getHostname().equals("0")) {
System.out.println("初始化应该加载2次");
mqttList.add(server);
}
}
}
}
}
/**
* 获取连接对象
*
* @return
*/
publicsynchronized ServerMQTT getMqtt() {
System.out.println("mqttList 大小" + mqttList.size());
for (ServerMQTT mq : mqttList) {
if (mq.getHostname().equals(pool.NetAddress) && mq.getUsername().equals(pool.Username)) {
System.out.println("获取了MQTT对象" + mq.getHostname()+"/作比较"+pool.NetAddress);
return mq;
}
}
return pool.setMqtt();
}
/**
* 将MQTT连接放回连接池中
*
* 如果连接池已满,则关闭
*/
publicsynchronized void closeMqtt(ServerMQTT mqtt) {
if (mqttList.size() > POOL_MAX_SIZE) { // 如果连接池已满
mqtt.disconnect();
mqttList.remove(mqtt);
System.out.println("连接池已满,需要移除对象");
} else {
int flag = 0;
for (ServerMQTT mq : mqttList) { // 如果存在该对象,则不用添加
if (mq.getHostname().equals(mqtt.getHostname()) && mq.getUsername().equals(mqtt.getUsername())) {
flag++;
System.out.println("如果存在该对象,则不用添加 mq对象:" + mq + "mqtt" + mqtt);
}
}
if (flag == 0) // 添加该对象
{
mqttList.add(mqtt);
System.out.println("需要添加对象!");
}
}
}
/**
* 初始化 MQTT
*
* @return
*/
privateServerMQTT setMqtt() {
//System.out.println("理论,不需要初始化!");
returnnew ServerMQTT() {
@Override
protectedString getPassword() {
return PassWord;
}
@Override
protected String getUsername() {
return Username;
}
@Override
protectedString getHostname() {
return NetAddress;
}
@Override
protectedString getClientid() {
return Clientid;
}
};
}
}