Eclipse Hono MongoDB设备注册HTTP API间歇性返回text/html 404咨询
环境
- Eclipse Hono 2.7.0(
eclipsehono/hono-service-device-registry-mongodb) - 同时在2.6.0版本测试→行为一致
- MongoDB 6.0
- Quarkus 3.8.4(嵌入Hono)
- 运行环境:Ubuntu 22.04和macOS上的Docker Compose
- 问题在两种环境均可复现
问题
HTTP管理API(端口28080)会间歇性返回404响应,Content-Type为text/html,呈现一致的轮询模式。
示例行为:
- GET
/v1/tenants/airechemistry→ 404(text/html) - GET
/v1/tenants/airechemistry→ 404(text/html) - GET
/v1/tenants/airechemistry→ 200(application/json) - GET
/v1/tenants/airechemistry→ 200(application/json)
该模式会持续重复。
在CPU核心更多(即Vert.x事件循环线程更多)的机器上,失败率会上升。例如,10个线程时仅约2个返回正确响应→失败率约80%。
观察/证据
1. Content-Type表明路由级故障
404响应返回:
Content-Type: text/html <html><body><h1>Resource not found</h1></body></html>
200响应返回:
Content-Type: application/json
关键细节:
text/html是无匹配路由时Vert.x的默认响应- Hono自身的错误处理始终返回JSON
结论:
部分HTTP服务器实例处理请求时未注册任何路由。
2. 路由注册日志
启动时日志:
(main) registering endpoint [v1/tenants] (main) registering endpoint [v1/tenants] (thread-0) starting endpoint [name: v1/tenants] (thread-1) starting endpoint [name: v1/tenants]
路由似乎在主线程注册,但事件循环线程上的HTTP服务器行为不一致。
3. 响应在MongoDB查询前发送
日志显示:
07:38:41,623 thread-0: HTTP 404 sent 07:38:41,638 thread-0: retrieving tenant
这证明:
- 404并非因MongoDB中缺少数据导致
- 路由在处理器执行前返回
4. AMQP端点未受影响
- 通过AMQP进行的凭证查询(MQTT适配器使用)100%正常工作
- 问题仅局限于HTTP层
5. GET和POST请求均受影响
- 租户创建和查询均呈现相同故障模式
- 与读写操作无关
已尝试的解决方法
以下操作均未解决问题:
HONO_REGISTRY_HTTP_AUTHENTICATIONREQUIRED=false→ 无变化HONO_APP_MAXINSTANCES=1→ 情况更糟(约75%失败率)HONO_REGISTRY_HTTP_INSTANCES=1→ 情况更糟QUARKUS_VERTX_PREFER_NATIVE_TRANSPORT=false→ 无变化QUARKUS_VERTX_EVENT_LOOPS_POOL_SIZE=1→ 无变化- MongoDB超时配置(
QUARKUS_MONGODB_*)→ 无效果 HONO_MONGODB_SERVERSELECTIONTIMEOUTINMS=30000→ 无效果- 升级至Hono 2.7.0 → 行为一致
总结
- HTTP请求有时会被未注册任何路由的Vert.x实例处理
- 故障行为随事件循环线程数量增加而恶化
- 问题具有确定性且可复现
- 与MongoDB、认证或AMQP无关
咨询问题
这是否是Eclipse Hono/Quarkus/Vert.x初始化阶段的已知问题,即路由未正确绑定到所有事件循环线程?
或者是否需要特定配置以确保所有HTTP服务器实例的路由注册一致?
内容的提问来源于stack exchange,提问作者Vishal C
相关产品推荐
相关产品推荐

