java - 只有有限的 mqtt 客户端连接到 IBM MQ 代理
问题描述
我正在尝试使用在 suse linux 上运行的 MQTT 协议 (V3.1) 和 IBM MQ (8.0.0.0) 代理构建推送通知服务,但是,我遇到了一个问题。我编写了一个简单的 java 程序来测试 IBM MQ 中的并发连接数。它只是开始实例化 MqttClient 并将它们中的每一个连接到远程 IBM MQ 代理。
public MyConsumer(String topic) throws MqttException{
this.client = new MqttClient(SERVER_ADDRESS, MqttClient.generateClientId(), new MemoryPersistence());
client.setCallback(new MyCallback());
MqttConnectOptions connectOptions = new MqttConnectOptions();
connectOptions.setMqttVersion(MqttConnectOptions.MQTT_VERSION_3_1);
connectOptions.setCleanSession(false);
try
{
if (!this.client.isConnected())
{
this.client.connect(connectOptions);
this.client.subscribe(topic);
}
}
catch (Exception e)
{
System.out.println("****** error ******");
e.printStackTrace();
}
}
奇怪的是,在大约 870 个客户端成功连接到代理后,我得到了“连接丢失 (32109) - java.io.EOFException”异常:
Connection lost (32109) - java.io.EOFException
at org.eclipse.paho.client.mqttv3.internal.CommsReceiver.run(CommsReceiver.java:146)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.EOFException
at java.io.DataInputStream.readByte(DataInputStream.java:267)
at org.eclipse.paho.client.mqttv3.internal.wire.MqttInputStream.readMqttWireMessage(MqttInputStream.java:65)
at org.eclipse.paho.client.mqttv3.internal.CommsReceiver.run(CommsReceiver.java:107)
... 1 more
我同时在两台不同的计算机上运行测试程序,以确保问题与测试计算机无关。此外,我在队列管理器中定义了两个遥测通道,每个通道都部署在不同的端口上,但连接到代理的客户端总数仍约为 870!最后,我创建了两个队列管理器,在这种情况下,客户端连接的数量增加了一倍。我检查了 mqxr 日志,但没有错误日志。谁能给我任何线索,说明为什么每个队列管理器只接受这个号码连接。
PS:提及我使用emqtt 代理(另一个 mqtt 代理)测试此示例可能会有所帮助,它运行良好(连接数超过 5k)
解决方案
使用 MQTT 协议 (V3.1) 和 IBM MQ (8.0.0.0) 代理的推送通知服务
首先,您为什么不使用 MQTT 协议 v3.1.1?
其次,停止使用产品的“0”版本。立即升级到 MQ v8.0.0.10 或更好的 MQ v9.0.0.4。
最后,您正在运行多少个客户端应用程序(进程)来创建 870 个连接?
推荐阅读
- lua - Gmod Lua:制作一个附有覆盖层的简单 SWEP
- amazon-web-services - 如何使用 Boto3 从 AWS Glue 获取最后访问的分区
- python - Pandas 多索引数据框 - 从多索引多列中的一个索引中选择最大值
- java - 无法在 Ubuntu 20.10 上运行 VLCJ JavaFX
- r - 使用 dplyr 或 forcats 重新编码 NA 因子
- javascript - HtmlWebpackPlugin - 在 dist 上创建 html 但 js 链接不起作用
- numpy - 自定义 Python Monte Carlo 积分函数低估了多维积分
- python - discord.py 事件中的角色检查
- node.js - 组件名称未显示在 url
- python - 即使在假定的正确匹配上,Python findall 也不会返回结果