1.问题:
rabbitmq的生产者端循环产生了多条消息给消费者,而消费者无法及时将消息处理掉,在消费端积压了多条消息(消费失败的时候,消息队列会一直重复的发送消息,导致程序死循环)需要清理项目因为错误而产生的积压消息队列。
2.原因:
消息接收方因退出企业,账号已注销,企业微信报错81013,导致无法处理消息,消息积压。
3.处理办法(问题已处理,截图为示例):
(1)登录rabbitmq管理面板,点击queues标签。
(2)查看unacked列,如果>0,消息积压。
(3)点进name列消息积压的行。
(4)往下拉,先点击“purge message”清除队列。
(5)如果消息还在,点击“delete queue”删除队列。
4.附:rabbitmq 管理面板 Queues 中 features 各参数释义指南https://blog.ytso.com/251403.html
Features 功能
D:d 是 durable 的缩写,代表这个队列中的消息支持持久化。
AD:ad 是 autoDelete 的缩写。代表当前队列的最后一个消费者退订时被自动删除。注意:此时不管队列中是否还存在消息,队列都会删除。
excl:是 exclusive 的缩写。代表这是一个排他队列。如果一个队列被声明为排他队列,该队列仅对首次声明它的连接可见,并在连接断开时自动删除。这里需要注意三点:其一,排他队列是基于连接可见的,同一连接的不同信道是可以同时访问同一个连接创建的排他队列的。其二,“首次”,如果一个连接已经声明了一个排他队列,其他连接是不允许建立同名的排他队列的,这个与普通队列不同。其三,即使该队列是持久化的,一旦连接关闭或者客户端退出,该排他队列都会被自动删除的。这种队列适用于只限于一个客户端发送读取消息的应用场景。
Args:是 arguments 的缩写。代表该队列配置了 arguments 参数。
TTL:是 x-message-ttl 的缩写。设置队列中的所有消息的生存周期(统一为整个队列的所有消息设置生命周期), 也可以在发布消息的时候单独为某个消息指定剩余生存时间,单位毫秒。
Exp:Auto Expire,是 x-expires 配置的缩写。当队列在指定的时间没有被访问(consume, basicGet, queueDeclare…)就会被删除,Features=Exp。注意这里是删除队列,不是队列中的消息。
Lim:说明该队列配置了 x-max-length。限定队列的消息的最大值长度,超过指定长度将会把最早的几条删除掉。
Lim B:说明队列配置了 x-max-length-bytes。限定队列最大占用的空间大小, 一般受限于内存、磁盘的大小。
DLX:说明该队列配置了 x-dead-letter-exchange。当队列消息长度大于最大长度、或者过期的等,将从队列中删除的消息推送到指定的交换机中去而不是丢弃掉。
DLK:x-dead-letter-routing-key 的缩写,将删除的消息推送到指定交换机的指定路由键的队列中去。
Pri:x-max-priority 的缩写,优先级队列。表明该队列支持优先级,先定义最大优先级值(定义最大值一般不要太大),在发布消息的时候指定该消息的优先级, 优先级更高(数值更大的)的消息先被消费。
Ovfl:x-overflow 的缩写。队列中的消息溢出时,如何处理这些消息。要么丢弃队列头部的消息,要么拒绝接收后面生产者发送过来的所有消息。有两个配置项:drop-head,代表丢弃队列头部的消息,默认行为;reject-publish 设置队列中的消息溢出后,该队列的行为:”拒绝接收”(所有消息)。
ha-all:镜像队列。all 表示镜像到集群上的所有节点,ha-params 参数忽略。