我想对 mosquitto 进行压力测试,所以我创建了一些代码如下
for (int i = 0; i < 800; i++) {
final int j = i;
Thread t = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(j + " : ************");
try {
MqttClient client = new MqttClient("tcp://192.168.88.203", SERVER_CLIENTID_PREFIX + j);
client.connect();
MqttMessage message = new MqttMessage((j + ":me").getBytes());
message.setQos(2);
client.publish(TOPIC_PREFIX + j, message);
} catch (MqttSecurityException e) {
e.printStackTrace();
} catch (MqttException e) {
e.printStackTrace();
}
}
});
t.start();
}
但是,我在运行期间遇到了一些错误,例如 EOFException
并且某些客户端断开连接。
我想知道一台mosquitto服务器可以同时发布多少个客户端消息,压力测试如何进行。谢谢!
详细异常是:
Connection lost (32109) - java.io.EOFException
at org.eclipse.paho.client.mqttv3.internal.CommsReceiver.run(CommsReceiver.java:162)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.io.EOFException
at java.io.DataInputStream.readByte(DataInputStream.java:250)
at org.eclipse.paho.client.mqttv3.internal.wire.MqttInputStream.readMqttWireMessage(MqttInputStream.java:51)
at org.eclipse.paho.client.mqttv3.internal.CommsReceiver.run(CommsReceiver.java:121)
... 1 more
我从 mosquitto 服务器上找到了一些日志:
1383736170: Socket read error on client Server-82, disconnecting.
请帮帮我,谢谢!
最佳答案
我使用与上面类似的代码得到了这个完全相同的错误。我发现将 QOS 更改为 0 可以解决问题。
message.setQos(0);
[编辑] 进一步挖掘,我发现 RabbitMQ 的 MQTT 插件不支持 QOS 2。http://www.rabbitmq.com/mqtt.html
关于带有 paho 的 java.io.EOFException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19813101/