SDK使用注意事项
本文介绍使用开源的客户端SDK接入云消息队列 RabbitMQ 版服务端时的注意事项。
使用客户端时需要设置自动重连功能吗?
设置com.rabbitmq.client.ConnectionFactory
接口时,必须开启连接自动恢复功能,保证服务端升级时,客户端断开连接可自动重新连接,否则会导致消息读写中断。
//设置为true,开启Connection自动恢复功能;设置为false,关闭Connection自动恢复功能。
factory.setAutomaticRecoveryEnabled(true);
//设置自动恢复间隔时间,单位:毫秒。
factory.setNetworkRecoveryInterval(5000);
生产消息时需要注意什么?
在生产或消费过程中,请勿频繁开启或关闭连接。请尽可能使用长期存活的Connection,以免每次收发消息时都需要创建新的Connection,消耗大量的网络资源和服务端资源,甚至引起服务端SYN Flood防护。更多信息,请参见Connection。
生产消息前根据实际情况选择是否打开发送确认接口。开启发送确认,服务端收到消息后,会调用本地方法确认消息收到。
mandatory
设置为true时,如果消息因为路由原因,未到达Queue,客户端添加的ReturnListener
接口将会被调用。发送消息时,强烈建议自定义msgId,即消息的唯一标识。可用于消息查询、轨迹查询、以及故障排查时后台信息定位。
消息发送时,需要根据
basicPublish
接口返回的错误类型决定是否抛出异常。如果是业务自身问题,例如
ExchangeNotExist
(Exchange不存在)则需要抛出异常。如果是发送消息被限流,建议关闭旧的连接,重新创建并初始化Channel,这样可以保证业务的连续性。
消费消息时需要注意什么?
消费数据时,需要防止消费倾斜。具体做法,请参见Connection和Channel的使用建议。
消费消息时,请根据业务自身消费能力设置QoS,即服务端最多推送未ack消息的条数,默认为100条,自定义设置值不能超过100,否则设置不生效,仍然使用默认值。如果消费能力较弱,建议将QoS值降低。如果服务端堆积消息量达到设置的QoS,则不会再推送消息给客户端。这种情况下客户端看到的现象是服务端间歇性推送消息,并且重启消费者后消息恢复,建议通过增强消费者的消费能力解决。
消费者提交的ack如果不在指定时间内,则触发消费重试。消息将会被重新投递,最多重试16次。若重试16次还未成功,则消息将被丢弃或发送至死信Exchange。消息的重试间隔时间如下:
Serverless版实例:5分钟
专业版实例:1分钟
企业版实例:5分钟
铂金版实例:30分钟
basicGet
拉取消息效率较低,能达到的上限TPS没有basicConsume
高。生产环境大规模消费消息推荐使用basicConsume
,而不是basicGet
。queueDeclare
和exchangeDeclare
等元数据接口有限流设置,建议在控制台上创建,不建议在发送数据时调用,否则可能触发限流导致连接关闭。更多信息,请参见使用限制。
- 本页导读 (1)