客户端首次接入连接不上服务端,收不到消息如何排查?
请检查以下配置是否填写正确:
检查接入点是否填写正确。接入点请从控制台实例详情页面获取。
使用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的订阅关系及消费者信息,将不符合预期的消费者的订阅代码中的订阅关系修改一致。
如何处理消息堆积?
消息出现堆积,可能原因如下:
消费者消息处理逻辑异常,导致消息无法正常消费。
消息生产应用出现突发流量,消息生产速度远大于消费速度,消息来不及消费出现堆积。
消费者依赖的下游服务耗时变长,消费线程阻塞等。
消费线程不够,消费并发度较小,消费速度跟不上生产速度。
您需要查看客户端日志或客户端堆栈信息,确定异常原因,具体操作,请参见如何处理消息堆积。
消费者消费不到消息如何处理?
登录云消息队列 RocketMQ 版控制台,进入Group 管理页面,查看消费者是否在线,客户端连接是否正常,若客户端未连接,查看客户端日志根据报错修改异常。
查看订阅关系是否一致,若不一致根据订阅关系的分布情况定位消费者客户端,修改客户端的订阅消息代码。
若某个消费组下的机器宕机,机器重启期间,消息会不会丢失?
云消息队列 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中的最早一条消息开始消费。
消费者在线无消费消息,但Group有堆积
请检查消费者使用Group对Topic的订阅方式。如果消费者采用消息过滤方式订阅Topic,未命中过滤条件的消息会被计算为堆积,符合设计预期。详情参见消息过滤。
采用SQL/TAG消费过滤的方式,未消费到消息但Group有消息堆积,堆积量的计算如下所示。
SQL消费方式:堆积量 = 已就绪的消息量 + 处理中的消息量 - 未被SQL命中的消息数量。
TAG消费方式:堆积量 =(已就绪的消息量 + 处理中的消息量)* TAG标签消息百分比。
TAG标签消息百分比 = 采样内TAG标签消息量 / 采样消息总量
仪表盘消息堆积量指标显示消息有大量堆积,但排查消费侧,消息已被消费
如果采用Remoting协议SDK,并在消费端将消费方式设置为广播消费,则会产生这种现象。服务端依据消息位点信息判断堆积情况,而广播消费模式下消费位点是在客户端维护的,因此会看到消息堆积的情况。
消费端在采用TAG/SQL过滤方式进行消费时,未满足过滤条件的消息将被视为消息堆积。