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

超过tps限制之后,会关闭channel,但是客户端会一直重试是么? org.springfram

超过tps限制之后,会关闭channel,但是客户端会一直重试是么?

org.springframework.amqp.rabbit.connection.CachingConnectionFactory$DefaultChannelCloseLogger.log:1566 - Channel shutdown: channel error; protocol method: #method<channel.close>(reply-code=530, reply-text=denied for too many requests, ErrorHelp[643F306D42454218907B7F05], class-id=60, method-id=40)

展开
收起
巴拉巴拉巴拉 2023-04-19 11:47:01 433 0
6 条回答
写回答
取消 提交回答
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com

    在阿里云消息队列 MQ 中,当超过 TPS 限制之后,Channel 会被关闭,此时客户端会确实会一直重试。但是这样做可能会导致消息积压,对整个系统的性能和稳定性产生负面影响。因此,建议开发者在使用 MQ 的过程中减少或避免出现超过 TPS 限制的情况,以保证系统的稳定运行。同时,针对超出 TPS 限制的情况,可以通过调整队列属性、扩容、降低负载等方式进行处理。

    2023-04-30 22:10:52
    赞同 展开评论 打赏
  • 当 RabbitMQ 服务器接收到过多的请求时,会关闭 channel,并返回一个 reply-code=530、reply-text=denied for too many requests 的错误信息。

    当客户端收到这个错误信息时,会根据自己的重试策略进行重试。默认情况下,Spring AMQP 在重试之间会等待一段随机时间,然后重新尝试连接到 RabbitMQ,直到达到最大重试次数。

    2023-04-22 07:56:18
    赞同 展开评论 打赏
  • 当 RabbitMQ 超过 TPS(每秒处理消息数)限制时,它可能会关闭 channel,这是为了保护服务器不被过多的消息压垮。当 channel 被关闭时,客户端会收到一个 ChannelClosedException 异常,并且无法在该 channel 上继续发送或接收消息。

    客户端通常会尝试重新连接并重新打开一个新的 channel,以便继续发送和接收消息。这通常是通过使用 RabbitMQ 客户端库提供的自动重试机制来实现的。不过需要注意的是,在重新连接之前,客户端需要实现一些策略,如指数退避,以避免过多的连接请求导致服务器进一步负担过重。

    2023-04-20 15:28:32
    赞同 展开评论 打赏
  • 这个时候channel已经因为限流关闭,需要捕捉异常创建新的channel。sdk可能做了不同的封装,具体可以看下sdk的实现。

    此答案来自钉钉群“RabbitMQ&AMQP 产品群"

    2023-04-19 18:03:54
    赞同 展开评论 打赏
  • 值得去的地方都没有捷径

    是的,当超过RabbitMQ的TPS限制后,RabbitMQ会关闭channel,并返回一个530错误码,表示客户端请求被拒绝。此时,客户端会收到一个Channel shutdown的通知,然后会尝试重新连接RabbitMQ,并重新打开一个新的channel。

    在重新连接RabbitMQ之前,客户端可以根据具体的业务场景,采取一些措施来避免频繁的重试。例如,可以增加消息发送的间隔时间、优化消息的发送方式、调整消息的优先级等。此外,还可以通过监控RabbitMQ的TPS和连接数等指标,及时发现并解决问题。

    需要注意的是,频繁的重试可能会对RabbitMQ的性能和稳定性造成影响,因此建议在设计应用程序时,尽可能避免超过RabbitMQ的TPS限制。

    2023-04-19 15:04:48
    赞同 展开评论 打赏
  • 存在即是合理

    是的,如果超过了TPS限制,RocketMQ会关闭Channel,并且客户端会一直重试。这是因为RocketMQ的Channel是一个高性能的队列,如果客户端一直向Channel发送消息,RocketMQ可能会因为超过了它的处理能力而关闭Channel。

    在这种情况下,客户端会一直尝试重新发送消息,直到RocketMQ重新开放Channel。这可能会导致客户端的重复发送,因为RocketMQ已经关闭了Channel,但是客户端仍然尝试发送消息。

    为了避免这种情况,你可以尝试限制客户端向Channel发送的消息数量,或者使用RocketMQ的限流功能来限制客户端的发送速率。

    2023-04-19 13:32:43
    赞同 展开评论 打赏
滑动查看更多
问答分类:

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

热门讨论

热门文章

相关电子书

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