package org.iot.mqtt.test; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.ForkJoinTask; import java.util.concurrent.atomic.AtomicInteger; import org.fusesource.mqtt.client.QoS; import org.fusesource.mqtt.client.Topic; import org.iot.mqtt.common.config.TestConfig; import org.iot.mqtt.handler.MqttBaseHandler; import org.iot.mqtt.test.support.TestSize; import org.iot.mqtt.test.utils.ByteUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Created by shifeng on 2018/10/31 * */ public class MqttMutiClientSubTest extends MqttBaseHandler { private static Logger logger = LoggerFactory.getLogger(MqttMutiClientSubTest.class); private static final String topic0 = "QOS0"; private static final String topic1 = "QOS1"; private static final String topic2 = "QOS2"; private static AtomicInteger count = new AtomicInteger(); public static void main(String[] args) throws Exception { if(args.length == 0) { logger.error("please set config path"); System.exit(-1); } if(args.length > 1) { TestSize.setClientSize(Integer.valueOf(args[1])); } TestConfig properties = new TestConfig(args[0]); ForkJoinPool forkJoinPool = new ForkJoinPool(TestSize.getClientSize()); ForkJoinTask<?>[] list = new ForkJoinTask[TestSize.getClientSize()]; for (int i = 0; i < TestSize.getClientSize(); i++) { int index = i; ForkJoinTask<?> fork = forkJoinPool.submit(new Thread(new Runnable() { @Override public void run() { MqttMutiClientSubTest handler = new MqttMutiClientSubTest(); String clientId = "client"+index; String clientName = clientId+"Sub"; Topic[] topics = new Topic[] { new Topic(clientId+topic0, QoS.AT_MOST_ONCE), new Topic(clientId+topic1, QoS.AT_LEAST_ONCE), new Topic(clientId+topic2, QoS.EXACTLY_ONCE) }; handler.init(properties, topics, clientName, false); logger.info(clientName+" testConn inited"); } })); list[i] = fork; } for (int i = 0; i < TestSize.getClientSize(); i++) { list[i].join(); } Thread.sleep(Integer.MAX_VALUE); } @Override public void processInput(String msg) { logger.info(new String(ByteUtil.hexStr2Bytes(msg))+" count: "+count.getAndIncrement()); } }