Quarkus中使用SmallRye Reactive Messaging MQTT连接器无法连接Broker
问题诊断与解决方案
从日志来看,你的Quarkus应用尝试连接的是localhost:4456,但你配置的Broker端口是1234,说明配置未被正确加载,或者连接参数不符合Broker要求,导致连接建立后立即被关闭。以下是具体排查和修复步骤:
检查配置键的有效性
你配置中的通道名使用了斜杠mqtt/test,部分环境下特殊字符可能导致配置解析异常。建议将通道名改为下划线或连字符(比如mqtt_test),同步修改配置键和代码中@Outgoing注解的通道名:# 修改后的配置示例 mp.messaging.outgoing.mqtt_test.connector=smallrye-mqtt mp.messaging.outgoing.mqtt_test.host=localhost mp.messaging.outgoing.mqtt_test.port=1234 mp.messaging.outgoing.mqtt_test.qos=1 mp.messaging.outgoing.mqtt_test.protocol=ws改用完整URL配置
避免分散配置可能带来的解析问题,直接用url属性指定完整的WebSocket地址:mp.messaging.outgoing.mqtt_test.connector=smallrye-mqtt mp.messaging.outgoing.mqtt_test.url=ws://localhost:1234 mp.messaging.outgoing.mqtt_test.qos=1添加WebSocket路径配置
多数MQTT Broker的WebSocket端点并非根路径,而是/mqtt这类特定路径。如果你的Broker也是如此,需添加路径配置:mp.messaging.outgoing.mqtt_test.websocket-path=/mqtt验证Broker的WebSocket服务可用性
先用第三方工具(如wscat)测试Broker的WS端点是否正常:wscat -c ws://localhost:1234如果连接失败,说明Broker未正确启用WebSocket监听,或端口配置错误,需要先排查Broker的设置。
开启调试日志确认配置加载
添加启动参数开启SmallRye消息组件的调试日志,确认配置是否被正确读取:java -Dquarkus.log.category."io.smallrye.reactive.messaging".level=DEBUG -jar your-app.jar查看日志中是否有配置加载的相关信息,确认host、port等参数是否符合预期。
内容的提问来源于stack exchange,提问作者Biggy Poopa
相关产品推荐
相关产品推荐

