应用启动报 PRECONDITION_FAILED inequivalent arg ‘durable’,channel 被 broker 直接关掉。日志里能对上时间点,这种反而好排。
队列已经以另一组参数存在,这次声明的 durable、auto_delete 或者 arguments 跟线上不一致,broker 拒绝之后就把 channel 关了。这一点先确认清楚,后面就不用反复试。
rabbitmqctl list_queues name durable auto_delete arguments rabbitmqctl delete_queue order.q
这次卡住的地方就在「RabbitMQ 参数不一致」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。
报错里带路径的,先去看那个路径在不在、权限对不对。同一份配置存在多处的,先确认改的是被加载的那一份。
新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。
处理上按这个顺序:先查出线上队列的真实参数 不要照着代码去猜;声明参数与线上对齐 或者干脆换一个新的队列名;确实要改参数只能删队列重建 先确认没有积压。
结果对不对很好判断,应用启动不再关闭 channel,管理页里的队列参数和代码一致。
