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