Dead Letter
RabbitMQ๋ ๋ฉ์์ง๊ฐ ์๋น๋๊ณ ์์์น ๋ชปํ๊ฒ ์ฒ๋ฆฌ๋์ง ์์ ๊ฒฝ์ฐ, ํด๋น ๋ฉ์์ง๋ฅผ ๋ค์ ํ๋ก ๋ณด๋ด๋ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ์ธ Re-Queuing์ ์ํํ๋ค. ์ด ๊ณผ์ ์ ๋ฉ์์ง๊ฐ Consumer์๊ฒ ์ ๋ฌ๋ ํ, ์ปจ์๋จธ๊ฐ ์ด๋ฅผ ์ฒ๋ฆฌํ์์ ํ์ธํ๋ acknowledgment(ACK) ๋ฉ์์ง๋ฅผ RabbitMQ ๋ธ๋ก์ปค์ ๋ณด๋ด์ง ์์ ๋ ๋ฐ์ํ๋ค.
ํ์ง๋ง ๊ณ์ ๋์ผํ ์๋ฌ๋ก ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ๊ฒฝ์ฐ, ์๋ฌ๋ฅผ ๋ฐ์์ํค๋ ๋ฉ์์ง๋ ์๋น๋๊ณ ๋ฆฌํ์ํ๋ ๋ฃจํ๋ฅผ ๋ฐ๋ณตํ ๊ฒ์ด๋ค.
Message๊ฐ Dead Letter๊ฐ ๋๋ ์กฐ๊ฑด
๋ฉ์์ง๊ฐ Queue์์ ๊ฑฐ๋ถ(Reject) ๋๋ NACK ์ํ
Re-Queue=false๋ก ์ค์ ๋ Consumer๊ฐ reject/nack ์๋ต์ ํตํด ๊ฑฐ์ ํ ๋ฉ์ธ์งRe-Queue=false ์ค์ ์ ๋ฉ์์ง๋ฅผ ๊ฑฐ๋ถํ ๋, ํด๋น ๋ฉ์์ง๋ฅผ ์๋ ํ๋ก ๋๋๋ฆฌ์ง ์๊ฒ ๋ค๋ ์๋ฏธ์ด๋ค. ์ฆ, ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌ๋์ง ์์์ ์๋ฏธํ๋ค.
Re-Queue=true๋ก ์ค์ ๋ Consumer๊ฐ reject/nack ์๋ต์ ํตํด ๊ฑฐ์ ํ ๋ฉ์ธ์ง๋ ๋ค์ ๋ฆฌํ์ ๋๊ธฐ ๋๋ฌธ์DLX(Dead Letter Exchange)๊ธฐ๋ฅ์ด ๋์ํ์ง ์๋๋ค.
Per-Message TTL์ด ๋ง๋ฃ๋ ๊ฒฝ์ฐ
๋ฉ์์ง๊ฐ ํ์ ์ ์ฅ๋ TTL์ ์ด๊ณผํ๋ฉด, ํด๋น ๋ฉ์์ง๋ ๋ง๋ฃ๋์ด ๋ฐ๋ ๋ ํฐ ํ๋ก ์ด๋ํ๋ค.
ํ์ ์ค์ ๋ TTL์ด ๋ง๋ฃ๋๋ ๊ฒ์ ํ ์์ฒด๋ฅผ ์ญ์ ํ๋ฉฐ, ๋จ์์๋ ๋ฉ์์ง๋ ๋ชจ๋ ์ญ์ ๋๊ณ ๋ฐ๋ ๋ ํฐ๋ก ์ฒ๋ฆฌํ์ง ์๋๋ค.
Queue์ ์ต๋ ๊ธธ์ด ์ด๊ณผ
ํ์ ์ค์ ๋
์ต๋ ๋ฉ์์ง ์(max-length)๋๋์ต๋ ๋ฐ์ดํธ ์(max-length-bytes)๋ฅผ ์ด๊ณผํ ๊ฒฝ์ฐ ๋ฐ์ํ๋ค. (์ต๋ ๊ธธ์ด๊ฐ 100์ด๊ณ ํ์ 100๊ฐ์ ๋ฉ์์ง๊ฐ ์๋๋ฐ ์๋กญ๊ฒ ์ถ๊ฐ๋๋ ๊ฒฝ์ฐ)RabbitMQ์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์ฅ ์ค๋๋ ๋ฉ์์ง๊ฐ ๋ฐ๋ ๋ ํฐ ํ(DLQ)๋ก ์ด๋ํ๋ค. ์ด๋
x-max-length์ ์ฑ ์ ์ฌ์ฉํ ๋์ ๊ธฐ๋ณธ ๋์์ด๋ค. FIFO ์์น์ ๋ฐ๋ฅธ๋ค.RabbitMQ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์ฅ ์ค๋๋ ๋ฉ์์ง๋ฅผ ์ ๊ฑฐํ๊ณ ์๋ก์ด ๋ฉ์์ง๋ฅผ ์ถ๊ฐํ๊ฑฐ๋, ์๋ก์ด ๋ฉ์์ง๋ฅผ ๋ฐ๋ ๋ ํฐ ํ๋ก ์ ์กํ๋ค.
Queue๊ฐ ๊ฐ๋์ฐฌ ๊ฒฝ์ฐ
ํ๊ฐ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๊ฐ๋ ์ฐจ์ ๋ ์ด์ ๋ฉ์์ง๋ฅผ ์ ์ฅํ ์ ์๋ ์ํ์ผ ๋, ์๋ก์ด ๋ฉ์์ง๋ ๋ฐ๋ ๋ ํฐ ํ๋ก ์ ์ก๋๋ค. ์ด ๊ฒฝ์ฐ๋ ์์คํ ๋ฉ๋ชจ๋ฆฌ๋ ๋์คํฌ ์ฉ๋์ด ๋ถ์กฑํ์ฌ ์๋ก์ด ๋ฉ์์ง๋ฅผ ์์ฉํ ์ ์๋ ์ํฉ์ ์๊ธฐํ๋ค.
RabbitMQ์์ ๋ฐ๋ ๋ ํฐ๊ฐ ๋ ๋ฉ์์ง์ ํค๋๋ฅผ ํ์ธํ๋ฉด, ๋ฉ์์ง๊ฐ ๋ฐ๋ ๋ ํฐ ํ๋ก ์ด๋ํ ์ด์ ๋ฅผ ์ ์ ์๋ค.
์ด ์ ๋ณด๋ ์ฃผ๋ก โx-deathโ ํค๋์ ์ ์ฅ๋๊ณ ๊ด๋ จ ์ ๋ณด๊ฐ ์ ์ฅ๋์ด ์๋ค.
โx-deathโ Header์ ํฌํจ๋ ์ฃผ์ ์ ๋ณด
reason ๋ฉ์์ง๊ฐ ๋ฐ๋ ๋ ํฐ ํ๋ก ์ด๋ํ ์ด์ ๋ฅผ ๋ํ๋ธ๋ค. ์๋ฅผ๋ค์ด, TTL ๋ง๋ฃ, Consumer์ ์ํ Reject, ํ๊ฐ ๊ฐ๋์ฐจ ๋ฒ๋ ค์ง ๊ฒฝ์ฐ ๋ฑ์ ์ด์ ๊ฐ ์๋ค.
time
๋ฉ์์ง๊ฐ ๋ฐ๋ ๋ ํฐ ํ๋ก ์ด๋ํ ์๊ฐ์ด๋ค. ๋ฉ์์ง์ ์ฒ๋ฆฌ ์ด๋ ฅ์ ์ถ์ ํ๋ ๋ฐ ์ ์ฉํ๋ค.
count
๋์ผํ reason์ผ๋ก ๋ฉ์์ง๊ฐ ๋ฐ๋ ๋ ํฐ ํ๋ก ์ด๋ํ ํ์์ด๋ค. ํน์ ๋ฉ์์ง๊ฐ ์ผ๋ง๋ ์์ฃผ ์คํจํ๋์ง ์ ์ ์๋ค.
queue
๋ฐ๋ ๋ ํฐ ํ๋ก ์ด๋ํ๊ธฐ ์ ์ ์๋ ํ์ ์ด๋ฆ์ด๋ค. ๋ฉ์์ง์ ์ถ์ฒ๋ฅผ ์ถ์ ํ ์ ์๋ค.
exchange
๋ฐ๋ ๋ ํฐ ํ๋ก ์ด๋ํ๊ธฐ ์ ๋ฉ์์ง๋ฅผ ๋ง์ง๋ง์ผ๋ก ์ฒ๋ฆฌํ Exchange ์ด๋ฆ์ด๋ค. ์ฌ๋ฌ ๋ฒ DLX์ ์ํด ์ฒ๋ฆฌ๋ ๋ฉ์์ง์ธ ๊ฒฝ์ฐ DLX ์ ๋ณด๊ฐ ํฌํจ๋ ์ ์๋ค.
Dead Letter Exchange(DLX) ๋?
RabbitMQ์ DLX๋ ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ๋ชปํด์ ์ฒ๋ฆฌํ ์ ์๋ ๋ฉ์์ง๋ค์ Routing ํ๋ Exchange์ด๋ค.
DLX ์์ฑ ๋ฐฉ๋ฒ
DLX๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ด๋ ต์ง ์๋ค.
DLX์ฉ Exchange ์์ฑ
Dead Letter Queue ์์ฑ
Queue Argument ์ค์
๋ฉ์ธ์ง๋ฅผ ์ ์ฅํ๋ ํ๋ฅผ ๋ง๋ค ๋, Argument ๋ถ๋ถ์ ๊ฑฐ๋ถ๋๊ฑฐ๋ ์ฒ๋ฆฌ๋์ง ๋ชปํด ๋ฒ๋ ค์ง ๋ฉ์์ง์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ์ค์ ํด์ผ ํ๋ค. ํ ์์ฑ ์, Key-Value ํ์์ผ๋ก โx-dead-letter-exchangeโ ์์ฑ์ DLX ๊ฐ์ ๋ช ์ํ๋ค.
ex)
x-dead-letter-exchange : log.dlx
์ด๋ ๊ฒ ํ๋ฅผ ์์ํ๊ณ ๋๋ฉด ๋ฒ๋ ค์ง๊ฑฐ๋ ๊ฑฐ๋ถ๋๋ ๋ฉ์ธ์ง๋ค์ dlx Exchange๋ก ๋ค์ด๊ฐ๊ฒ ๋๋ค.
DLQ์ DLX Binding
Dead Letter Queue์ DLX๋ฅผ ๋ฐ์ธ๋ฉ ํด์ ๋ฉ์์ง๊ฐ DLX๋ก ์ ์ก๋ ๋ ์ฌ์ฉํ Routing Key๋ฅผ ์ค์ ํ๋ค.
DLQ์ Argument๋ก
โx-dead-letter-routing-key : routing keyโ์ค์
์ค์ DLQ๋ฅผ ํ์ธํด ๋ณด๋ฉด, ์ผ์ชฝ ์๋จ Exchange์๋ DLX ์ด๋ฆ๊ณผ Routing key๊ฐ ๋ช ์๋์ด ์๊ณ ํด๋น ๋ฉ์์ง์ delivery_mode, ์ด๋ ฅ, ์คํจ ์ฌ์ ๋ฑ์ด ๋ํ๋ ์๋ค.
Last updated
