消息消费常见问题

客户端首次接入连接不上服务端,收不到消息如何排查?

请检查以下配置是否填写正确:

  • 检查接入点是否填写正确。接入点请从控制台实例详情页面获取。

  • 使用telnet 接入点域名端口命令初步检查网络连通性。

    • 若您的应用部署在本地、或需要跨地域访问且无法使用CEN组网,您需要使用公网接入点访问云消息队列 RocketMQ 版实例。使用公网接入点会产生下行流量费用,具体信息,请参见4.x系列公网访问费用5.x系列公网访问费用

    • 若您的应用部署在阿里云ECS上,您可以使用VPC接入点通过VPC专有网络访问云消息队列 RocketMQ 版实例。该场景下,需要保证阿里云ECS的地域和要访问的云消息队列 RocketMQ 版实例处于同一地域。

  • 5.0系列实例若开启公网访问,请确认是否有配置白名单。公网访问默认全部地址放行,若配置了白名单则仅白名单中的IP地址允许访问云消息队列 RocketMQ 版

  • 检查Topic名称是否填写正确,不要有多余空格或特殊字符,并确保Topic已在控制台提前创建。

  • 检查用户名密码是否设置正确。

    • 5.0系列实例:需要填写实例的用户名和密码,在控制台实例详情页获取。

    • 4.0系列实例:需要填写阿里云账号或RAM用户的AccessKey(AccessKey ID和AccessKey Secret)并正确授权。获取方式,请参见创建AccessKey

订阅关系不一致如何处理?

登录控制台,进入Group 管理页面,查看指定Group的订阅关系及消费者信息,将不符合预期的消费者的订阅代码中的订阅关系修改一致。

如何处理消息堆积?

消息出现堆积,可能原因如下:

  • 消费者消息处理逻辑异常,导致消息无法正常消费。

  • 消息生产应用出现突发流量,消息生产速度远大于消费速度,消息来不及消费出现堆积。

  • 消费者依赖的下游服务耗时变长,消费线程阻塞等。

  • 消费线程不够,消费并发度较小,消费速度跟不上生产速度。

您需要查看客户端日志或客户端堆栈信息,确定异常原因,具体操作,请参见如何处理消息堆积

消费者消费不到消息如何处理?

  1. 登录云消息队列 RocketMQ 版控制台,进入Group 管理页面,查看消费者是否在线,客户端连接是否正常,若客户端未连接,查看客户端日志根据报错修改异常。

  2. 查看订阅关系是否一致,若不一致根据订阅关系的分布情况定位消费者客户端,修改客户端的订阅消息代码。

若某个消费组下的机器宕机,机器重启期间,消息会不会丢失?

云消息队列 RocketMQ 版的订阅是持久化订阅,ConsumerGroup下线或消费异常时,消息不会丢失。当消费者客户端重新上线后,直接从下线前的消费位点继续消费消息。

订阅消息时消息Tag是否可以为空?

订阅消息时Tag设置为空会导致消费者消费不到任何消息。若您希望订阅Topic中的所有消息,则需要将Tag设置为*。示例代码如下:

String topic = "Your Topic";
//使用Tag标签过滤消息,订阅所有消息。
FilterExpression filterExpression = new FilterExpression("*", FilterExpressionType.TAG);
pushConsumer.subscribe(topic, filterExpression);

更多信息,请参见Tag标签过滤

创建新的消费分组订阅旧的Topic,如何设置消费起始位置?

消费者分组创建时不支持设置消费起始位置,不管是订阅新的Topic还是旧的Topic,消费者第一次启动时都会默认从Topic中的最早一条消息开始消费。

消费者首次启动后,您可以在云消息队列 RocketMQ 版控制台重置消费位点,具体操作,请参见重置消费位点

消费者在线无消费消息,但Group有堆积

请检查消费者使用Group对Topic的订阅方式。如果消费者采用消息过滤方式订阅Topic,未命中过滤条件的消息会被计算为堆积,符合设计预期。详情参见消息过滤

采用SQL/TAG消费过滤的方式,未消费到消息但Group有消息堆积,堆积量的计算如下所示。

image
  • SQL消费方式:堆积量 = 已就绪的消息量 + 处理中的消息量 - 未被SQL命中的消息数量。

  • TAG消费方式:堆积量 =(已就绪的消息量 + 处理中的消息量)* TAG标签消息百分比。

说明

TAG标签消息百分比 = 采样内TAG标签消息量 / 采样消息总量

仪表盘消息堆积量指标显示消息有大量堆积,但排查消费侧,消息已被消费

  1. 如果采用Remoting协议SDK,并在消费端将消费方式设置为广播消费,则会产生这种现象。服务端依据消息位点信息判断堆积情况,而广播消费模式下消费位点是在客户端维护的,因此会看到消息堆积的情况。

  2. 消费端在采用TAG/SQL过滤方式进行消费时,未满足过滤条件的消息将被视为消息堆积。