运行两个Benthos流配置文件时出现EOF连接丢失错误求助
问题分析与解决方案
核心问题1:MQTT客户端ID重复
两个配置文件的MQTT输出均使用相同的client_id: benthos-umh。MQTT协议规定同一客户端ID仅允许存在一个活跃连接,当第二个流以相同ID连接MQTT broker时,broker会强制断开第一个流的连接,直接触发Connection lost due to: EOF错误。
修复方法
为每个流配置唯一的客户端ID:
- 修改
bar.yaml的MQTT配置:
output: mqtt: urls: - 'localhost:1883' topic: 'ia/raw/opcuatrigger${! meta("opcua_path") }' client_id: benthos-umh-bar
- 修改
foo.yaml的MQTT配置:
output: mqtt: urls: - 'localhost:1883' topic: 'ia/raw/opcua/' client_id: benthos-umh-foo
核心问题2:OPC UA并发连接冲突
两个流同时连接同一OPC UA端点,部分OPC UA服务器会限制并发连接数,或多流并发订阅可能引发连接不稳定。
优化建议
复用OPC UA连接:使用Benthos的资源系统定义共享OPC UA连接,让两个流复用同一连接,避免并发冲突:
- 创建
resources.yaml文件:
resources: opcua: my_shared_connection: endpoint: "opc.tcp://localhost:46010" insecure: true- 修改
bar.yaml的输入配置,引用共享资源:
input: opcuatrigger: resource: my_shared_connection nodeIDs: ["ns=2;s=Humidity", "ns=2;s=Air Quality"] subscribeEnabled: true- 修改
foo.yaml的输入配置,引用共享资源:
input: opcua: resource: my_shared_connection nodeIDs: ["ns=2;s=Humidity", "ns=2;s=Air Quality"] subscribeEnabled: true运行时包含资源文件:
benthos streams ./resources.yaml ./streams/*.yaml- 创建
调整OPC UA服务器配置:若允许,检查OPC UA服务器的并发连接限制,适当调高允许的连接数。
验证步骤
- 应用上述修改后,重新运行对应启动命令。
- 检查日志是否仍出现
EOF连接错误。 - 确认两个流均能正常接收OPC UA数据并发送至MQTT。
内容的提问来源于stack exchange,提问作者Girish Bhutiya
相关产品推荐
相关产品推荐

