RocketMQ这个问题怎么解决?
2024-08-07 03:36:10.115 ERROR [37940] [RocketmqClientAsyncWorker-0-12] [o.a.r.c.j.i.ClientImpl#?:?] - Failed to fetch topic route, clientId=DESKTOP-3QARCJC@37940@0@uvo3544uy0, topic=phone-cabinet-dev
org.apache.rocketmq.shaded.io.grpc.StatusRuntimeException: UNIMPLEMENTED: HTTP status code 404
invalid content-type: null
trailers: Metadata(:status=404,date=Tue, 06 Aug 2024 19:36:09 GMT,server=Cowboy,content-length=0)
at org.apache.rocketmq.shaded.io.grpc.Status.asRuntimeException(Status.java:539)
at org.apache.rocketmq.shaded.io.grpc.stub.ClientCalls$UnaryStreamToFuture.onClose(ClientCalls.java:544)
at org.apache.rocketmq.shaded.io.grpc.PartialForwardingClientCallListener.onClose(PartialForwardingClientCallListener.java:39)
at org.apache.rocketmq.shaded.io.grpc.ForwardingClientCallListener.onClose(ForwardingClientCallListener.java:23)
at org.apache.rocketmq.shaded.io.grpc.ForwardingClientCallListener$SimpleForwardingClientCallListener.onClose(ForwardingClientCallListener.java:40)
at org.apache.rocketmq.shaded.io.grpc.internal.ClientCallImpl.closeObserver(ClientCallImpl.java:563)
at org.apache.rocketmq.shaded.io.grpc.internal.ClientCallImpl.access$300(ClientCallImpl.java:70)
at org.apache.rocketmq.shaded.io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInternal(ClientCallImpl.java:744)
at org.apache.rocketmq.shaded.io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInContext(ClientCallImpl.java:723)
at org.apache.rocketmq.shaded.io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
at org.apache.rocketmq.shaded.io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
根据您提供的错误日志,问题是RocketMQ客户端尝试获取主题路由信息时失败了,具体错误为UNIMPLEMENTED: HTTP status code 404 invalid content-type: null。这表明客户端发送的请求未得到服务端的正确响应,服务端返回了404错误,通常意味着请求的资源未找到或URL不正确。
结合您提供的背景知识,我们可以分析并尝试解决问题:
分析原因
协议不匹配: 错误日志中提到了gRPC相关的类和异常,这暗示您的客户端可能正在使用gRPC协议与服务端通信。根据知识内容,gRPC协议SDK仅支持Apache RocketMQ 5.x版本的服务端。如果服务端是4.x版本或者客户端配置错误尝试连接到非gRPC的服务端接口,就可能出现此错误。
路由信息未注册或服务端配置问题: 404错误可能是因为试图访问的主题在服务端并未注册,或者服务端的路由信息未正确配置。
网络或URL问题: 请求的URL可能不正确,或者网络问题导致请求未能到达正确的服务端地址。
解决步骤
由于知识内容中未直接提供解决此类错误的具体步骤,我将依据常规故障排查逻辑提供指导:
确认服务端版本: 确保您的RocketMQ服务端是5.x版本,因为您使用的是gRPC协议客户端。如果不是,请考虑升级服务端或更改客户端使用Remoting协议。
检查主题配置: 在服务端确认该主题(phone-cabinet-dev)已被正确创建并且配置无误。可以通过RocketMQ的管理界面或命令行工具检查主题是否存在。
客户端配置审查: 检查客户端配置文件,确保broker地址、端口以及gRPC相关配置正确无误。特别注意namesrvAddr或endpoint设置,应指向正确的服务端地址,并且是gRPC服务的地址。
网络连通性: 确认客户端与服务端之间的网络连接通畅,没有防火墙或网络策略阻止请求。
查看服务端日志: 在RocketMQ服务端的日志中查找有关此错误的更多信息,可能会有更详细的错误描述帮助定位问题。
解释
以上步骤是基于错误信息和您提供的背景知识进行的逻辑推理和故障排查。首先通过错误类型判断可能是协议或版本不匹配,然后逐级深入到具体的配置与网络层面进行检查,目的是为了定位并解决客户端无法成功获取主题路由信息的根本原因。
如果问题依然存在,可能需要进一步的技术支持或查阅RocketMQ社区的更新资料,以获取更具体的解决方案。
此回答整理自钉群“群2-Apache RocketMQ 中国开发者钉钉群”
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系产品 Serverless 化。RocketMQ 一站式学习:https://rocketmq.io/