package com.dy.common.mw.channel.mqtt; import org.apache.commons.pool2.impl.GenericObjectPool; import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import org.eclipse.paho.client.mqttv3.MqttClient; /** * @Author: liurunyu * @Date: 2025/6/4 11:35 * @Description */ public class MqttClientPool { private final GenericObjectPool pool; public MqttClientPool(String broker, String username, String password, int maxConnections) { MqttClientPooledObjectFactory factory = new MqttClientPooledObjectFactory(broker, username, password); GenericObjectPoolConfig config = new GenericObjectPoolConfig<>(); config.setMaxTotal(maxConnections); config.setMaxIdle(maxConnections); config.setMinIdle(1); config.setTestOnBorrow(true); config.setTestOnReturn(true); config.setTestWhileIdle(true); this.pool = new GenericObjectPool<>(factory, config); } public MqttClient popClient() throws Exception { return pool.borrowObject(); } public void pushClient(MqttClient client) { if (client != null) { pool.returnObject(client); } } public boolean isClose(){ return pool.isClosed(); } public void close() { pool.close(); } }