带有 paho 的 java.io.EOFException

标签 java mqtt mosquitto paho

我想对 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/

相关文章:

nginx反向代理wss - 客户端在读取客户端请求行时发送无效方法

authentication - 如何使用Redis作为mosquitto ACL的后端(使用JPmens插件)?

java - 处理命令行参数

Android 中的 JavaScript

node.js - 使用 node.js 运行 mqttjs 示例

ssl - Mosquitto SSL 证书验证失败

java - Hibernate 中 native 查询的命名参数出现奇怪的异常

java - log4j:缩写/缩短包名称

node.js - MQTT 嵌入 mosca,无需任何代理

ssl - 使用 TLS 保护 arduino 到 mosquitto 的连接