开发者社区 > 云原生 > 云消息队列 > 正文

RocketMQ这个问题怎么解决?

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)

展开
收起
嘟嘟嘟嘟嘟嘟 2024-08-13 23:08:31 32 0
1 条回答
写回答
取消 提交回答
  • 根据您提供的错误日志,问题是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 中国开发者钉钉群”

    2024-08-14 08:09:53
    赞同 1 展开评论 打赏

涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系产品 Serverless 化。RocketMQ 一站式学习:https://rocketmq.io/

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载