RabbitMQ死信交换机全解析:消息何时会进入死信队列?
-
- 1. 什么是死信交换机?
- 2. 消息进入死信交换机的三种情况
-
- 2.1 情况一:消息被消费者拒绝
- 2.2 情况二:消息过期(TTL)
- 2.3 情况三:队列达到最大长度
- 3. 完整配置示例
- 4. 死信消息的原始信息
- 5. 完整流程图
- 6. 实际应用场景
- 7. 常见问题
|
🌺The Begin🌺点点关注,收藏不迷路🌺 |
在RabbitMQ中,死信交换机(DLX)是处理异常消息的核心机制。当消息变成“死信”时,会被自动路由到死信交换机,进而进入死信队列供后续排查或补偿处理。本文将全面解析消息进入死信交换机的三种情况。
1. 什么是死信交换机?
死信指无法被正常消费的消息。消息变成死信后,不会直接被丢弃,而是被发送到预先指定的死信交换机,最终进入死信队列。
#mermaid-svg-49rjbzlvbnTzPbt7{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-49rjbzlvbnTzPbt7 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-49rjbzlvbnTzPbt7 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-49rjbzlvbnTzPbt7 .error-icon{fill:#552222;}#mermaid-svg-49rjbzlvbnTzPbt7 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-49rjbzlvbnTzPbt7 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-49rjbzlvbnTzPbt7 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-49rjbzlvbnTzPbt7 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-49rjbzlvbnTzPbt7 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-49rjbzlvbnTzPbt7 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-49rjbzlvbnTzPbt7 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-49rjbzlvbnTzPbt7 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-49rjbzlvbnTzPbt7 .marker.cross{stroke:#333333;}#mermaid-svg-49rjbzlvbnTzPbt7 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-49rjbzlvbnTzPbt7 p{margin:0;}#mermaid-svg-49rjbzlvbnTzPbt7 .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-49rjbzlvbnTzPbt7 .cluster-label text{fill:#333;}#mermaid-svg-49rjbzlvbnTzPbt7 .cluster-label span{color:#333;}#mermaid-svg-49rjbzlvbnTzPbt7 .cluster-label span p{background-color:transparent;}#mermaid-svg-49rjbzlvbnTzPbt7 .label text,#mermaid-svg-49rjbzlvbnTzPbt7 span{fill:#333;color:#333;}#mermaid-svg-49rjbzlvbnTzPbt7 .node rect,#mermaid-svg-49rjbzlvbnTzPbt7 .node circle,#mermaid-svg-49rjbzlvbnTzPbt7 .node ellipse,#mermaid-svg-49rjbzlvbnTzPbt7 .node polygon,#mermaid-svg-49rjbzlvbnTzPbt7 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-49rjbzlvbnTzPbt7 .rough-node .label text,#mermaid-svg-49rjbzlvbnTzPbt7 .node .label text,#mermaid-svg-49rjbzlvbnTzPbt7 .image-shape .label,#mermaid-svg-49rjbzlvbnTzPbt7 .icon-shape .label{text-anchor:middle;}#mermaid-svg-49rjbzlvbnTzPbt7 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-49rjbzlvbnTzPbt7 .rough-node .label,#mermaid-svg-49rjbzlvbnTzPbt7 .node .label,#mermaid-svg-49rjbzlvbnTzPbt7 .image-shape .label,#mermaid-svg-49rjbzlvbnTzPbt7 .icon-shape .label{text-align:center;}#mermaid-svg-49rjbzlvbnTzPbt7 .node.clickable{cursor:pointer;}#mermaid-svg-49rjbzlvbnTzPbt7 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-49rjbzlvbnTzPbt7 .arrowheadPath{fill:#333333;}#mermaid-svg-49rjbzlvbnTzPbt7 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-49rjbzlvbnTzPbt7 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-49rjbzlvbnTzPbt7 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-49rjbzlvbnTzPbt7 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-49rjbzlvbnTzPbt7 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-49rjbzlvbnTzPbt7 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-49rjbzlvbnTzPbt7 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-49rjbzlvbnTzPbt7 .cluster text{fill:#333;}#mermaid-svg-49rjbzlvbnTzPbt7 .cluster span{color:#333;}#mermaid-svg-49rjbzlvbnTzPbt7 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-49rjbzlvbnTzPbt7 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-49rjbzlvbnTzPbt7 rect.text{fill:none;stroke-width:0;}#mermaid-svg-49rjbzlvbnTzPbt7 .icon-shape,#mermaid-svg-49rjbzlvbnTzPbt7 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-49rjbzlvbnTzPbt7 .icon-shape p,#mermaid-svg-49rjbzlvbnTzPbt7 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-49rjbzlvbnTzPbt7 .icon-shape .label rect,#mermaid-svg-49rjbzlvbnTzPbt7 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-49rjbzlvbnTzPbt7 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-49rjbzlvbnTzPbt7 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-49rjbzlvbnTzPbt7 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
消息变成死信
生产者
普通交换机
普通队列配置了DLX
死信交换机
死信队列
死信消费者
2. 消息进入死信交换机的三种情况
#mermaid-svg-m0nAKVj7mDJwsMeA{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-m0nAKVj7mDJwsMeA .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-m0nAKVj7mDJwsMeA .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-m0nAKVj7mDJwsMeA .error-icon{fill:#552222;}#mermaid-svg-m0nAKVj7mDJwsMeA .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-m0nAKVj7mDJwsMeA .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-m0nAKVj7mDJwsMeA .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-m0nAKVj7mDJwsMeA .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-m0nAKVj7mDJwsMeA .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-m0nAKVj7mDJwsMeA .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-m0nAKVj7mDJwsMeA .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-m0nAKVj7mDJwsMeA .marker{fill:#333333;stroke:#333333;}#mermaid-svg-m0nAKVj7mDJwsMeA .marker.cross{stroke:#333333;}#mermaid-svg-m0nAKVj7mDJwsMeA svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-m0nAKVj7mDJwsMeA p{margin:0;}#mermaid-svg-m0nAKVj7mDJwsMeA .edge{stroke-width:3;}#mermaid-svg-m0nAKVj7mDJwsMeA .section–1 rect,#mermaid-svg-m0nAKVj7mDJwsMeA .section–1 path,#mermaid-svg-m0nAKVj7mDJwsMeA .section–1 circle,#mermaid-svg-m0nAKVj7mDJwsMeA .section–1 polygon,#mermaid-svg-m0nAKVj7mDJwsMeA .section–1 path{fill:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-m0nAKVj7mDJwsMeA .section–1 text{fill:#ffffff;}#mermaid-svg-m0nAKVj7mDJwsMeA .node-icon–1{font-size:40px;color:#ffffff;}#mermaid-svg-m0nAKVj7mDJwsMeA .section-edge–1{stroke:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-m0nAKVj7mDJwsMeA .edge-depth–1{stroke-width:17;}#mermaid-svg-m0nAKVj7mDJwsMeA .section–1 line{stroke:hsl(60, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-m0nAKVj7mDJwsMeA .disabled,#mermaid-svg-m0nAKVj7mDJwsMeA .disabled circle,#mermaid-svg-m0nAKVj7mDJwsMeA .disabled text{fill:lightgray;}#mermaid-svg-m0nAKVj7mDJwsMeA .disabled text{fill:#efefef;}#mermaid-svg-m0nAKVj7mDJwsMeA .section-0 rect,#mermaid-svg-m0nAKVj7mDJwsMeA .section-0 path,#mermaid-svg-m0nAKVj7mDJwsMeA .section-0 circle,#mermaid-svg-m0nAKVj7mDJwsMeA .section-0 polygon,#mermaid-svg-m0nAKVj7mDJwsMeA .section-0 path{fill:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-m0nAKVj7mDJwsMeA .section-0 text{fill:black;}#mermaid-svg-m0nAKVj7mDJwsMeA .node-icon-0{font-size:40px;color:black;}#mermaid-svg-m0nAKVj7mDJwsMeA .section-edge-0{stroke:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-m0nAKVj7mDJwsMeA .edge-depth-0{stroke-width:14;}#mermaid-svg-m0nAKVj7mDJwsMeA .section-0 line{stroke:hsl(240, 100%, 83.5294117647%);stroke-width:3;}#mermaid-svg-m0nAKVj7mDJwsMeA .disabled,#mermaid-svg-m0nAKVj7mDJwsMeA .disabled circle,#mermaid-svg-m0nAKVj7mDJwsMeA .disabled text{fill:lightgray;}#mermaid-svg-m0nAKVj7mDJwsMeA .disabled text{fill:#efefef;}#mermaid-svg-m0nAKVj7mDJwsMeA .section-1 rect,#mermaid-svg-m0nAKVj7mDJwsMeA .section-1 path,#mermaid-svg-m0nAKVj7mDJwsMeA .section-1 circle,#mermaid-svg-m0nAKVj7mDJwsMeA .section-1 polygon,#mermaid-svg-m0nAKVj7mDJwsMeA .section-1 path{fill:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-m0nAKVj7mDJwsMeA .section-1 text{fill:black;}#mermaid-svg-m0nAKVj7mDJwsMeA .node-icon-1{font-size:40px;color:black;}#mermaid-svg-m0nAKVj7mDJwsMeA .section-edge-1{stroke:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-m0nAKVj7mDJwsMeA .edge-depth-1{stroke-width:11;}#mermaid-svg-m0nAKVj7mDJwsMeA .section-1 line{stroke:hsl(260, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-m0nAKVj7mDJwsMeA .disabled,#mermaid-svg-m0nAKVj7mDJwsMeA .disabled circle,#mermaid-svg-m0nAKVj7mDJwsMeA .disabled text{fill:lightgray;}#mermaid-svg-m0nAKVj7mDJwsMeA .disabled text{fill:#efefef;}#mermaid-svg-m0nAKVj7mDJwsMeA .section-2 rect,#mermaid-svg-m0nAKVj7mDJwsMeA .section-2 path,#mermaid-svg-m0nAKVj7mDJwsMeA .section-2 circle,#mermaid-svg-m0nAKVj7mDJwsMeA .section-2 polygon,#mermaid-svg-m0nAKVj7mDJwsMeA .section-2 path{fill:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-m0nAKVj7mDJwsMeA .section-2 text{fill:#ffffff;}#mermaid-svg-m0nAKVj7mDJwsMeA .node-icon-2{font-size:40px;color:#ffffff;}#mermaid-svg-m0nAKVj7mDJwsMeA .section-edge-2{stroke:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-m0nAKVj7mDJwsMeA .edge-depth-2{stroke-width:8;}#mermaid-svg-m0nAKVj7mDJwsMeA .section-2 line{stroke:hsl(90, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-m0nAKVj7mDJwsMeA .disabled,#mermaid-svg-m0nAKVj7mDJwsMeA .disabled circle,#mermaid-svg-m0nAKVj7mDJwsMeA .disabled text{fill:lightgray;}#mermaid-svg-m0nAKVj7mDJwsMeA .disabled text{fill:#efefef;}#mermaid-svg-m0nAKVj7mDJwsMeA .section-3 rect,#mermaid-svg-m0nAKVj7mDJwsMeA .section-3 path,#mermaid-svg-m0nAKVj7mDJwsMeA .section-3 circle,#mermaid-svg-m0nAKVj7mDJwsMeA .section-3 polygon,#mermaid-svg-m0nAKVj7mDJwsMeA .section-3 path{fill:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-m0nAKVj7mDJwsMeA .section-3 text{fill:black;}#mermaid-svg-m0nAKVj7mDJwsMeA .node-icon-3{font-size:40px;color:black;}#mermaid-svg-m0nAKVj7mDJwsMeA .section-edge-3{stroke:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-m0nAKVj7mDJwsMeA .edge-depth-3{stroke-width:5;}#mermaid-svg-m0nAKVj7mDJwsMeA .section-3 line{stroke:hsl(120, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-m0nAKVj7mDJwsMeA .disabled,#mermaid-svg-m0nAKVj7mDJwsMeA .disabled circle,#mermaid-svg-m0nAKVj7mDJwsMeA .disabled text{fill:lightgray;}#mermaid-svg-m0nAKVj7mDJwsMeA .disabled text{fill:#efefef;}#mermaid-svg-m0nAKVj7mDJwsMeA .section-4 rect,#mermaid-svg-m0nAKVj7mDJwsMeA .section-4 path,#mermaid-svg-m0nAKVj7mDJwsMeA .section-4 circle,#mermaid-svg-m0nAKVj7mDJwsMeA .section-4 polygon,#mermaid-svg-m0nAKVj7mDJwsMeA .section-4 path{fill:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-m0nAKVj7mDJwsMeA .section-4 text{fill:black;}#mermaid-svg-m0nAKVj7mDJwsMeA .node-icon-4{font-size:40px;color:black;}#mermaid-svg-m0nAKVj7mDJwsMeA .section-edge-4{stroke:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-m0nAKVj7mDJwsMeA .edge-depth-4{stroke-width:2;}#mermaid-svg-m0nAKVj7mDJwsMeA .section-4 line{stroke:hsl(150, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-m0nAKVj7mDJwsMeA .disabled,#mermaid-svg-m0nAKVj7mDJwsMeA .disabled circle,#mermaid-svg-m0nAKVj7mDJwsMeA .disabled text{fill:lightgray;}#mermaid-svg-m0nAKVj7mDJwsMeA .disabled text{fill:#efefef;}#mermaid-svg-m0nAKVj7mDJwsMeA .section-5 rect,#mermaid-svg-m0nAKVj7mDJwsMeA .section-5 path,#mermaid-svg-m0nAKVj7mDJwsMeA .section-5 circle,#mermaid-svg-m0nAKVj7mDJwsMeA .section-5 polygon,#mermaid-svg-m0nAKVj7mDJwsMeA .section-5 path{fill:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-m0nAKVj7mDJwsMeA .section-5 text{fill:black;}#mermaid-svg-m0nAKVj7mDJwsMeA .node-icon-5{font-size:40px;color:black;}#mermaid-svg-m0nAKVj7mDJwsMeA .section-edge-5{stroke:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-m0nAKVj7mDJwsMeA .edge-depth-5{stroke-width:-1;}#mermaid-svg-m0nAKVj7mDJwsMeA .section-5 line{stroke:hsl(180, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-m0nAKVj7mDJwsMeA .disabled,#mermaid-svg-m0nAKVj7mDJwsMeA .disabled circle,#mermaid-svg-m0nAKVj7mDJwsMeA .disabled text{fill:lightgray;}#mermaid-svg-m0nAKVj7mDJwsMeA .disabled text{fill:#efefef;}#mermaid-svg-m0nAKVj7mDJwsMeA .section-6 rect,#mermaid-svg-m0nAKVj7mDJwsMeA .section-6 path,#mermaid-svg-m0nAKVj7mDJwsMeA .section-6 circle,#mermaid-svg-m0nAKVj7mDJwsMeA .section-6 polygon,#mermaid-svg-m0nAKVj7mDJwsMeA .section-6 path{fill:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-m0nAKVj7mDJwsMeA .section-6 text{fill:black;}#mermaid-svg-m0nAKVj7mDJwsMeA .node-icon-6{font-size:40px;color:black;}#mermaid-svg-m0nAKVj7mDJwsMeA .section-edge-6{stroke:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-m0nAKVj7mDJwsMeA .edge-depth-6{stroke-width:-4;}#mermaid-svg-m0nAKVj7mDJwsMeA .section-6 line{stroke:hsl(210, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-m0nAKVj7mDJwsMeA .disabled,#mermaid-svg-m0nAKVj7mDJwsMeA .disabled circle,#mermaid-svg-m0nAKVj7mDJwsMeA .disabled text{fill:lightgray;}#mermaid-svg-m0nAKVj7mDJwsMeA .disabled text{fill:#efefef;}#mermaid-svg-m0nAKVj7mDJwsMeA .section-7 rect,#mermaid-svg-m0nAKVj7mDJwsMeA .section-7 path,#mermaid-svg-m0nAKVj7mDJwsMeA .section-7 circle,#mermaid-svg-m0nAKVj7mDJwsMeA .section-7 polygon,#mermaid-svg-m0nAKVj7mDJwsMeA .section-7 path{fill:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-m0nAKVj7mDJwsMeA .section-7 text{fill:black;}#mermaid-svg-m0nAKVj7mDJwsMeA .node-icon-7{font-size:40px;color:black;}#mermaid-svg-m0nAKVj7mDJwsMeA .section-edge-7{stroke:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-m0nAKVj7mDJwsMeA .edge-depth-7{stroke-width:-7;}#mermaid-svg-m0nAKVj7mDJwsMeA .section-7 line{stroke:hsl(270, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-m0nAKVj7mDJwsMeA .disabled,#mermaid-svg-m0nAKVj7mDJwsMeA .disabled circle,#mermaid-svg-m0nAKVj7mDJwsMeA .disabled text{fill:lightgray;}#mermaid-svg-m0nAKVj7mDJwsMeA .disabled text{fill:#efefef;}#mermaid-svg-m0nAKVj7mDJwsMeA .section-8 rect,#mermaid-svg-m0nAKVj7mDJwsMeA .section-8 path,#mermaid-svg-m0nAKVj7mDJwsMeA .section-8 circle,#mermaid-svg-m0nAKVj7mDJwsMeA .section-8 polygon,#mermaid-svg-m0nAKVj7mDJwsMeA .section-8 path{fill:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-m0nAKVj7mDJwsMeA .section-8 text{fill:black;}#mermaid-svg-m0nAKVj7mDJwsMeA .node-icon-8{font-size:40px;color:black;}#mermaid-svg-m0nAKVj7mDJwsMeA .section-edge-8{stroke:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-m0nAKVj7mDJwsMeA .edge-depth-8{stroke-width:-10;}#mermaid-svg-m0nAKVj7mDJwsMeA .section-8 line{stroke:hsl(330, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-m0nAKVj7mDJwsMeA .disabled,#mermaid-svg-m0nAKVj7mDJwsMeA .disabled circle,#mermaid-svg-m0nAKVj7mDJwsMeA .disabled text{fill:lightgray;}#mermaid-svg-m0nAKVj7mDJwsMeA .disabled text{fill:#efefef;}#mermaid-svg-m0nAKVj7mDJwsMeA .section-9 rect,#mermaid-svg-m0nAKVj7mDJwsMeA .section-9 path,#mermaid-svg-m0nAKVj7mDJwsMeA .section-9 circle,#mermaid-svg-m0nAKVj7mDJwsMeA .section-9 polygon,#mermaid-svg-m0nAKVj7mDJwsMeA .section-9 path{fill:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-m0nAKVj7mDJwsMeA .section-9 text{fill:black;}#mermaid-svg-m0nAKVj7mDJwsMeA .node-icon-9{font-size:40px;color:black;}#mermaid-svg-m0nAKVj7mDJwsMeA .section-edge-9{stroke:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-m0nAKVj7mDJwsMeA .edge-depth-9{stroke-width:-13;}#mermaid-svg-m0nAKVj7mDJwsMeA .section-9 line{stroke:hsl(0, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-m0nAKVj7mDJwsMeA .disabled,#mermaid-svg-m0nAKVj7mDJwsMeA .disabled circle,#mermaid-svg-m0nAKVj7mDJwsMeA .disabled text{fill:lightgray;}#mermaid-svg-m0nAKVj7mDJwsMeA .disabled text{fill:#efefef;}#mermaid-svg-m0nAKVj7mDJwsMeA .section-10 rect,#mermaid-svg-m0nAKVj7mDJwsMeA .section-10 path,#mermaid-svg-m0nAKVj7mDJwsMeA .section-10 circle,#mermaid-svg-m0nAKVj7mDJwsMeA .section-10 polygon,#mermaid-svg-m0nAKVj7mDJwsMeA .section-10 path{fill:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-m0nAKVj7mDJwsMeA .section-10 text{fill:black;}#mermaid-svg-m0nAKVj7mDJwsMeA .node-icon-10{font-size:40px;color:black;}#mermaid-svg-m0nAKVj7mDJwsMeA .section-edge-10{stroke:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-m0nAKVj7mDJwsMeA .edge-depth-10{stroke-width:-16;}#mermaid-svg-m0nAKVj7mDJwsMeA .section-10 line{stroke:hsl(30, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-m0nAKVj7mDJwsMeA .disabled,#mermaid-svg-m0nAKVj7mDJwsMeA .disabled circle,#mermaid-svg-m0nAKVj7mDJwsMeA .disabled text{fill:lightgray;}#mermaid-svg-m0nAKVj7mDJwsMeA .disabled text{fill:#efefef;}#mermaid-svg-m0nAKVj7mDJwsMeA .section-root rect,#mermaid-svg-m0nAKVj7mDJwsMeA .section-root path,#mermaid-svg-m0nAKVj7mDJwsMeA .section-root circle,#mermaid-svg-m0nAKVj7mDJwsMeA .section-root polygon{fill:hsl(240, 100%, 46.2745098039%);}#mermaid-svg-m0nAKVj7mDJwsMeA .section-root text{fill:#ffffff;}#mermaid-svg-m0nAKVj7mDJwsMeA .section-root span{color:#ffffff;}#mermaid-svg-m0nAKVj7mDJwsMeA .section-2 span{color:#ffffff;}#mermaid-svg-m0nAKVj7mDJwsMeA .icon-container{height:100%;display:flex;justify-content:center;align-items:center;}#mermaid-svg-m0nAKVj7mDJwsMeA .edge{fill:none;}#mermaid-svg-m0nAKVj7mDJwsMeA .mindmap-node-label{dy:1em;alignment-baseline:middle;text-anchor:middle;dominant-baseline:middle;text-align:center;}#mermaid-svg-m0nAKVj7mDJwsMeA :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
死信来源
消息被拒绝
basic.reject
basic.nack
requeue=false
消息过期
队列TTL
消息TTL
队列达到最大长度
最大消息条数
最大字节数
2.1 情况一:消息被消费者拒绝
消费者调用basic.reject或basic.nack,且requeue=false时,消息进入死信交换机。
@Component
public class MessageConsumer {
@RabbitListener(queues = "normal.queue")
public void handleMessage(Message message, Channel channel) throws IOException {
try {
// 业务处理
processMessage(message);
channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
} catch (Exception e) {
// ❌ 拒绝且不重新入队 → 进入死信
channel.basicNack(
message.getMessageProperties().getDeliveryTag(),
false, // 不批量
false // requeue = false,不进死信
);
}
}
}
requeue=false与true的区别:
| requeue=true | 重新放回队列尾部 | ❌ |
| requeue=false | 进入死信交换机(如配置了DLX) | ✅ |
2.2 情况二:消息过期(TTL)
TTL可通过队列级别或消息级别设置,取较小值。消息过期后被移除队列,进入死信交换机。
队列级别TTL:队列中所有消息统一过期时间
@Bean
public Queue normalQueue() {
return QueueBuilder.durable("normal.queue")
.ttl(10000) // 10秒过期
.deadLetterExchange("dead.exchange")
.deadLetterRoutingKey("dead.routingkey")
.build();
}
消息级别TTL:每条消息单独设置过期时间
public void sendMessageWithTTL(String message, int ttlMillis) {
MessageProperties props = new MessageProperties();
props.setExpiration(String.valueOf(ttlMillis));
Message msg = MessageBuilder.withBody(message.getBytes())
.andProperties(props)
.build();
rabbitTemplate.convertAndSend("normal.exchange", "normal.key", msg);
}
2.3 情况三:队列达到最大长度
队列设置了最大长度或最大字节数,超出限制时,头部消息变成死信(取决于溢出策略)。
@Bean
public Queue normalQueue() {
return QueueBuilder.durable("normal.queue")
.maxLength(10) // 最多10条消息
.deadLetterExchange("dead.exchange")
.build();
}
溢出行为默认删除头部消息,这些被删除的消息会进入死信交换机。可通过x-overflow参数配置:drop-head(默认)或reject-publish。
3. 完整配置示例
@Configuration
public class DeadLetterConfig {
public static final String NORMAL_EXCHANGE = "normal.exchange";
public static final String NORMAL_QUEUE = "normal.queue";
public static final String NORMAL_KEY = "normal.key";
public static final String DEAD_EXCHANGE = "dead.exchange";
public static final String DEAD_QUEUE = "dead.queue";
public static final String DEAD_KEY = "dead.key";
@Bean
public DirectExchange normalExchange() {
return new DirectExchange(NORMAL_EXCHANGE);
}
@Bean
public DirectExchange deadExchange() {
return new DirectExchange(DEAD_EXCHANGE);
}
@Bean
public Queue normalQueue() {
return QueueBuilder.durable(NORMAL_QUEUE)
.ttl(10000) // 10秒过期
.maxLength(1000) // 最多1000条
.deadLetterExchange(DEAD_EXCHANGE)
.deadLetterRoutingKey(DEAD_KEY)
.build();
}
@Bean
public Queue deadQueue() {
return QueueBuilder.durable(DEAD_QUEUE).build();
}
@Bean
public Binding normalBinding() {
return BindingBuilder.bind(normalQueue())
.to(normalExchange())
.with(NORMAL_KEY);
}
@Bean
public Binding deadBinding() {
return BindingBuilder.bind(deadQueue())
.to(deadExchange())
.with(DEAD_KEY);
}
}
4. 死信消息的原始信息
消息进入死信队列后,会增加以下Header:
@Component
public class DeadLetterConsumer {
@RabbitListener(queues = "dead.queue")
public void handleDeadLetter(Message message) {
MessageProperties props = message.getMessageProperties();
// 获取死信原因
String reason = props.getHeader("x-death").toString();
// 输出类似:
// [{
// "reason": "rejected", // 死信原因
// "queue": "normal.queue", // 原队列
// "time": 1699876543212, // 死信时间
// "exchange": "normal.exchange",
// "routing-keys": ["normal.key"]
// }]
// 原始消息内容
String originalBody = new String(message.getBody());
// 记录死信,进行补偿处理
saveToDatabase(originalBody, reason);
}
}
死信原因类型:
- rejected:消费者拒绝且requeue=false
- expired:消息TTL过期
- maxlen:队列达到最大长度
5. 完整流程图
#mermaid-svg-ld4NHxcmHwI8DDLN{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-ld4NHxcmHwI8DDLN .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ld4NHxcmHwI8DDLN .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ld4NHxcmHwI8DDLN .error-icon{fill:#552222;}#mermaid-svg-ld4NHxcmHwI8DDLN .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ld4NHxcmHwI8DDLN .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ld4NHxcmHwI8DDLN .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ld4NHxcmHwI8DDLN .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ld4NHxcmHwI8DDLN .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ld4NHxcmHwI8DDLN .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ld4NHxcmHwI8DDLN .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ld4NHxcmHwI8DDLN .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ld4NHxcmHwI8DDLN .marker.cross{stroke:#333333;}#mermaid-svg-ld4NHxcmHwI8DDLN svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ld4NHxcmHwI8DDLN p{margin:0;}#mermaid-svg-ld4NHxcmHwI8DDLN .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-ld4NHxcmHwI8DDLN .cluster-label text{fill:#333;}#mermaid-svg-ld4NHxcmHwI8DDLN .cluster-label span{color:#333;}#mermaid-svg-ld4NHxcmHwI8DDLN .cluster-label span p{background-color:transparent;}#mermaid-svg-ld4NHxcmHwI8DDLN .label text,#mermaid-svg-ld4NHxcmHwI8DDLN span{fill:#333;color:#333;}#mermaid-svg-ld4NHxcmHwI8DDLN .node rect,#mermaid-svg-ld4NHxcmHwI8DDLN .node circle,#mermaid-svg-ld4NHxcmHwI8DDLN .node ellipse,#mermaid-svg-ld4NHxcmHwI8DDLN .node polygon,#mermaid-svg-ld4NHxcmHwI8DDLN .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ld4NHxcmHwI8DDLN .rough-node .label text,#mermaid-svg-ld4NHxcmHwI8DDLN .node .label text,#mermaid-svg-ld4NHxcmHwI8DDLN .image-shape .label,#mermaid-svg-ld4NHxcmHwI8DDLN .icon-shape .label{text-anchor:middle;}#mermaid-svg-ld4NHxcmHwI8DDLN .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-ld4NHxcmHwI8DDLN .rough-node .label,#mermaid-svg-ld4NHxcmHwI8DDLN .node .label,#mermaid-svg-ld4NHxcmHwI8DDLN .image-shape .label,#mermaid-svg-ld4NHxcmHwI8DDLN .icon-shape .label{text-align:center;}#mermaid-svg-ld4NHxcmHwI8DDLN .node.clickable{cursor:pointer;}#mermaid-svg-ld4NHxcmHwI8DDLN .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-ld4NHxcmHwI8DDLN .arrowheadPath{fill:#333333;}#mermaid-svg-ld4NHxcmHwI8DDLN .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ld4NHxcmHwI8DDLN .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ld4NHxcmHwI8DDLN .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ld4NHxcmHwI8DDLN .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-ld4NHxcmHwI8DDLN .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ld4NHxcmHwI8DDLN .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-ld4NHxcmHwI8DDLN .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ld4NHxcmHwI8DDLN .cluster text{fill:#333;}#mermaid-svg-ld4NHxcmHwI8DDLN .cluster span{color:#333;}#mermaid-svg-ld4NHxcmHwI8DDLN div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ld4NHxcmHwI8DDLN .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-ld4NHxcmHwI8DDLN rect.text{fill:none;stroke-width:0;}#mermaid-svg-ld4NHxcmHwI8DDLN .icon-shape,#mermaid-svg-ld4NHxcmHwI8DDLN .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ld4NHxcmHwI8DDLN .icon-shape p,#mermaid-svg-ld4NHxcmHwI8DDLN .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-ld4NHxcmHwI8DDLN .icon-shape .label rect,#mermaid-svg-ld4NHxcmHwI8DDLN .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ld4NHxcmHwI8DDLN .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-ld4NHxcmHwI8DDLN .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-ld4NHxcmHwI8DDLN :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
正常消费
消费者拒绝requeue=false
消息过期
队列满头部溢出
消息到达普通队列
消息状态
消费者确认ACK
结束
进入死信交换机
死信交换机路由
死信队列
死信消费者
补偿处理记录日志/人工介入
6. 实际应用场景
| 消息格式错误 | 消费者拒绝 | 进入死信,记录日志,人工修复 |
| 超时未支付订单 | 设置TTL=30分钟 | 进入死信,自动取消订单 |
| 流量高峰积压 | 队列长度限制 | 进入死信,转移到慢队列 |
| 重试次数耗尽 | 消费者拒绝 | 进入死信,人工介入 |
7. 常见问题
Q1:没有配置死信交换机,死信会怎样?
A:消息被直接丢弃。生产环境务必为重要队列配置DLX。
Q2:死信队列的消息还能再次进入死信吗?
A:会。如果死信队列也配置了DLX,消息再次变成死信会进入下一个死信队列,可能形成循环,需避免。
Q3:如何避免死信队列无限增长?
A:设置死信队列的TTL和最大长度,或定期清理。
📌 一句话总结
消息进入死信交换机有三种情况:消费者拒绝且不重新入队、TTL过期、队列满溢出。死信是RabbitMQ的"异常处理机制",而非错误。

|
🌺The End🌺点点关注,收藏不迷路🌺 |





