RabbitMQ: Zero to Hero

Sê-ri 40 bài đi từ thông điệp đầu tiên tới định tuyến, độ tin cậy, Spring AMQP, quorum queue và vận hành trên sản xuất. Mỗi bài có mã chạy được và số đo thật.

40/40 phần đã đăng RabbitMQ
1 Hàng đợi rút thời gian khách chờ từ 464 ms xuống dưới 1 ms — mà tổng thời gian làm xong việc không nhúc nhích Đo thật hai cách gọi một dịch vụ chậm: hàng đợi rút phản hồi từ 464 ms xuống dưới 1 ms, nhưng tổng thời gian làm xong việc không đổi. 11/07/2026 · 9 phút đọc 2 Dựng RabbitMQ bằng Docker mất ba giây — bốn cái bẫy im lặng đi kèm mất cả buổi chiều Dựng RabbitMQ bằng Docker chỉ mất một tệp compose. Bốn cái bẫy đi kèm thì mất cả buổi chiều — bài này đo từng cái một. 12/07/2026 · 8 phút đọc 3 Mở connection cho mỗi thông điệp chậm gấp 1128 lần — năm khái niệm AMQP và chỗ thông điệp biến mất Năm khái niệm của AMQP 0-9-1 như một đường dây thuê bao và một tổng đài: connection là đường dây đắt, channel là cuộc gọi ảo chạy chung trên đó. Đo bằng số giá mở connection, giá mở channel, và chỗ thông điệp lặng lẽ biến mất. 13/07/2026 · 7 phút đọc 4 Consumer chết giữa chừng mà không mất một thông điệp nào — vì broker chờ chữ ký, không chờ ai Mổ từng tham số của basicPublish và basicConsume, đo vòng đời Ready → Unacked → xong, và cờ mandatory bắt lại thông điệp lạc đường. 14/07/2026 · 7 phút đọc 5 Cái ping báo xanh trước 2,7 giây, còn số trên giao diện chậm hơn CLI bảy lần — nhìn broker sao cho đúng Ba đường nhìn vào broker — giao diện, rabbitmqctl và HTTP API. Lệnh kiểm tra nào nói thật, và vì sao số trên giao diện chậm hơn CLI bảy lần. 15/07/2026 · 7 phút đọc 6 Dòng khai báo hàng đợi trong mọi tutorial giờ đóng sập cả connection — bốn cờ và bốn mã lỗi Bốn cờ khai báo hàng đợi, tám tổ hợp và hai cái không còn được phép. Kèm bốn mã lỗi hay gặp và phạm vi sát thương của từng cái. 16/07/2026 · 7 phút đọc 7 Persistent nhanh hơn transient 31% — câu 'bật persistent thì chậm' đã hết đúng từ lâu Ba phần của một thông điệp AMQP, bốn thuộc tính broker thật sự dùng, và phép đo lật ngược lời khuyên «persistent thì chậm». 17/07/2026 · 8 phút đọc 8 'tôi gửi rồi mà consumer không nhận' — direct exchange khớp routing key đúng từng ký tự Kiểu định tuyến đơn giản nhất của RabbitMQ: năm biến thể của cùng một khoá chỉ một cái tới đích, và phép đo cho thấy số binding không ảnh hưởng thông lượng. 18/07/2026 · 7 phút đọc 9 Fanout vào 100 hàng đợi, thông lượng tụt 68 lần — broker tính công theo số bản chép, không theo số gửi Fanout bỏ qua routing key và chép thông điệp cho mọi hàng đợi. Đo cái giá của việc phát tán, và phân biệt chia việc với phát tán. 19/07/2026 · 6 phút đọc 10 don.# khớp cả khoá 'don' trần: cái chữ 'không' trong '# khớp không hoặc nhiều từ' là toàn bộ bài này Bảng khớp đầy đủ của topic exchange: chín mẫu nhân bảy khoá, đo thật. Khác biệt giữa * và #, và phép đo cho thấy topic gần như miễn phí. 20/07/2026 · 7 phút đọc 11 Headers exchange tụt 13 lần ở 500 binding — kiểu exchange duy nhất RabbitMQ không đánh chỉ mục Kiểu exchange thứ tư của RabbitMQ: khớp theo bảng header với x-match all hoặc any. Đo hiệu năng, chỉ ra cái bẫy kiểu dữ liệu, và nói thẳng khi nào nên dùng. 21/07/2026 · 8 phút đọc 12 Chuỗi rỗng khi gửi RabbitMQ không phải 'không có exchange' — nó là cửa sau vòng qua mọi luật định tuyến Default exchange là một exchange thật với binding ngầm không gỡ được — và là cửa sau vòng qua mọi luật định tuyến bạn dựng lên. 22/07/2026 · 7 phút đọc 13 Bật alternate exchange thì mandatory ngừng báo — và thông lượng tụt chính là lượng thông điệp bạn đang mất Hứng thông điệp không định tuyến được thay vì để nó bốc hơi — như một máng gạt cuối băng chuyền hứng kiện hàng không quét được. Alternate exchange khác mandatory thế nào, và cái giá đo được của nó. 23/07/2026 · 7 phút đọc 14 DLX trỏ ngược về hàng đợi gốc: một vòng lặp nuốt sạch dữ liệu, vòng lặp kia quay vô hạn Ba nguyên nhân đưa thông điệp vào dead letter exchange, cách đọc header x-death, và hai kiểu vòng lặp hỏng theo hai hướng ngược nhau. 24/07/2026 · 6 phút đọc 15 Chọn một exchange hay nhiều: quyết định thật không nằm ở tốc độ, mà ở chỗ cái tên chính là phân quyền Ba cách bố trí exchange cho một hệ thống thật, cái giá đo được của topology lớn, và quy ước đặt tên quyết định luôn cả phân quyền. 25/07/2026 · 8 phút đọc 16 Giết consumer giữa chừng, autoAck mất 948/1000 thông điệp — và vì sao basicQos không cứu nổi Ba chế độ acknowledgement như giao thư thường và thư có ký nhận: 'đã gửi' khác 'đã xử lý', và khoảng giữa là cửa sổ mất dữ liệu. Đo bằng cách kill -9 consumer thật, cái giá thông lượng của an toàn, và hai cách làm channel chết. 26/07/2026 · 7 phút đọc 17 Chờ broker xác nhận từng thông điệp một: chậm gấp 133 lần, mà chẳng an toàn hơn cách nhanh gấp 68 Bốn cách chờ broker xác nhận, đo cạnh nhau. Vì sao cách trực giác nhất là cách tệ nhất, và cơ chế nào làm cách bất đồng bộ nhanh. 27/07/2026 · 7 phút đọc 18 txCommit của RabbitMQ nguyên tử — nhưng chỉ trong broker, và ngộ nhận nó bao cả CSDL là đắt nhất txSelect, txCommit, txRollback đo cạnh publisher confirms. Vì sao tài liệu chính thức khuyên tránh, và điều rollback thật sự làm với ack. 28/07/2026 · 6 phút đọc 19 Prefetch 100 nhanh hơn 19 lần trên giấy, nhưng làm cả mẻ việc xong chậm gấp 4,3 lần Đường cong thông lượng theo prefetch từ 1 tới không giới hạn, và mặt trái không ai đo: consumer chậm ôm việc rồi cả mẻ phải chờ nó. 29/07/2026 · 7 phút đọc 20 Một thông điệp hỏng quay 30 679 vòng, chặn đứng năm cái lành xếp sau — và x-delivery-limit không cứu Cờ redelivered không đếm, requeue vô hạn ăn sạch consumer, và phép đo cho thấy x-delivery-limit chỉ tính khi consumer chết chứ không tính khi mã của bạn nack. 30/07/2026 · 6 phút đọc 21 Thử lại sau vài giây mà không giữ luồng: dựng backoff bằng TTL và DLX, tránh cái bẫy dồn mọi độ trễ thành một Dựng vòng thử lại có độ trễ bằng TTL và dead letter exchange, đo từng mốc thời gian, và cái bẫy head-of-line làm mọi mức độ trễ thành một. 31/07/2026 · 8 phút đọc 22 Consumer chết ba lần, số dư thành 300 thay vì 100 — RabbitMQ không có 'đúng một lần' RabbitMQ hứa at-least-once chứ không phải exactly-once. Ba cửa sổ sinh ra bản sao, ba cách chống, và cái giá thật của chúng — 122 byte mỗi thông điệp. 01/08/2026 · 7 phút đọc 23 Sập giữa commit và publish làm mất 20% đơn không ai biết — outbox đổi mất thành trùng Khe hở giữa commit cơ sở dữ liệu và publish, đo bằng cách sập đúng chỗ hiểm. Vì sao AFTER_COMMIT không cứu được, và outbox thật sự mua gì. 02/08/2026 · 7 phút đọc 24 Spring Boot bật RabbitMQ trong một dòng — kèm ba mặc định đi ngược đúng thứ 23 bài trước đo được Spring Boot auto-configuration cho sẵn gì cho RabbitMQ, ba mặc định đáng đổi ngay, và phép đo cho thấy RabbitTemplate không tốn thêm gì. 03/08/2026 · 6 phút đọc 25 Tăng consumer từ 1 lên 8 làm chậm gấp 4,4 lần — hay nhanh gấp 8, tuỳ listener có việc thật hay không Mặc định của @RabbitListener đo bằng reflection, khác biệt thật giữa Simple và Direct container, và vì sao tăng số consumer có thể làm chậm bốn lần. 04/08/2026 · 7 phút đọc 26 Đổi sang JSON không gỡ được ràng buộc giữa hai dịch vụ — nó chỉ chuyển chỗ Jackson2JsonMessageConverter, cái header trói hai dịch vụ vào nhau, và cách gỡ bằng idClassMapping. Kèm phép đo thông lượng hai converter. 05/08/2026 · 6 phút đọc 27 Khai topology bằng bean Spring: broker tắt vẫn khởi động xanh, khai lệch tham số chỉ là một dòng log RabbitAdmin khai báo topology từ bean, nhưng nó làm việc đó muộn hơn bạn tưởng — và khai lệch tham số không làm ứng dụng dừng lại. 06/08/2026 · 6 phút đọc 28 Cùng một listener, hai loại lỗi: một cái quay vô hạn 11.189 lần, một cái ra đi ngay lần đầu Vì sao hai ngoại lệ trong cùng một @RabbitListener lại có số phận ngược nhau, và phép đo cho thấy RepublishMessageRecoverer đính 1.688 byte header lên một thân 8 byte. 07/08/2026 · 7 phút đọc 29 Retry bốn dòng của Spring cho cùng kết quả nhưng chậm gấp 1000 lần — vì luồng ngồi chờ, không làm gì Spring AMQP cho bật retry bằng vài dòng cấu hình. Phép đo cho thấy nó chặn luồng consumer, và toàn bộ thời gian thêm vào là thời gian ngồi chờ. 08/08/2026 · 7 phút đọc 30 Test với broker giả thì mọi thứ xanh — chạy broker thật mà không biến bộ test thành nửa tiếng chờ Chạy broker thật trong test thay vì mock, giữ thời gian chạy ở mức chấp nhận được, và bỏ Thread.sleep — thứ làm năm phép chờ tốn 10,11 giây thay vì 0,12. 09/08/2026 · 6 phút đọc 31 Trace id chết ngay tại basicPublish — vì sao log hai đầu broker không nối được, và cái giá 10% để nối Ngữ cảnh truy vết dừng ngay tại basicPublish. Cách nối lại log hai phía bằng một header, đo cái giá, và ba chi tiết hay bỏ sót. 10/08/2026 · 6 phút đọc 32 Đẩy một triệu thông điệp vào RabbitMQ, RAM không nhúc nhích — thứ phình là đĩa, không phải bộ nhớ Đẩy dần tới một triệu thông điệp rồi đo bộ nhớ, đĩa và thông lượng. Vì sao chế độ lazy không còn ý nghĩa, và thứ thật sự cần lo khi hàng đợi phình. 11/08/2026 · 6 phút đọc 33 Quorum queue trên một node: trả đủ 36% thông lượng cho Raft, mà chẳng bảo vệ được ai Đo cái giá của Raft khi chưa có nhân bản nào, danh sách tham số quorum queue từ chối, và khi nào classic vẫn là lựa chọn đúng. 12/08/2026 · 7 phút đọc 34 Tắt một node: hàng đợi classic biến mất khỏi cụm, quorum không ai để ý — và cái giá của nó Dựng cụm ba node bằng Docker, đo cái giá thật của nhân bản, rồi tắt node và cắt mạng để xem hàng đợi classic và quorum hành xử khác nhau thế nào. 13/08/2026 · 8 phút đọc 35 Stream ghi 1000 thông điệp mà mọi công cụ báo 'còn 0' — kiểu hàng đợi mà đếm độ sâu là vô nghĩa Kiểu hàng đợi thứ ba của RabbitMQ — log chỉ ghi thêm. Đo thông lượng trên cụm ba node, đọc lại từ đầu, và cái bẫy làm mọi cảnh báo độ sâu hàng đợi mù tịt. 14/08/2026 · 7 phút đọc 36 Nối hai broker rời nhau: Shovel bê sạch thông điệp đi, Federation để nguyên rồi chép — khác nhau đúng một chữ Nối hai broker rời bằng Shovel và bằng Federation, đo tốc độ chuyển, và chỉ ra khác biệt quyết định việc chọn cái nào. 15/08/2026 · 6 phút đọc 37 TLS truyền dữ liệu chỉ tốn 5%, bắt tay mới đắt gấp 2,7 lần — và ba cột quyền chặn đúng cái gì vhost tách biệt tới đâu, ba cột quyền configure–write–read chặn đúng cái gì, và cái giá đo được của TLS trên cả hai chiều. 16/08/2026 · 7 phút đọc 38 Hai hàng đợi 30 000 thông điệp, mọi chỉ số giống hệt — chỉ tốc độ ack (795 vs 0) nói bên nào đang chết Đo hai tình huống giống hệt nhau trên mọi chỉ số quen thuộc, tìm ra con số duy nhất tách được chúng, và sáu chỉ số Prometheus đáng đặt cảnh báo. 17/08/2026 · 6 phút đọc 39 Cùng một mức đảm bảo, nhanh gấp 122 lần — và không đổi một dòng cấu hình broker nào Gom toàn bộ phép đo của ba mươi tám bài thành hai bảng: thứ thật sự đổi được hiệu năng, và sáu thứ ai cũng khuyên mà đo ra không khác gì. 18/08/2026 · 6 phút đọc 40 Kafka đọc nhanh gấp 16 lần RabbitMQ — nhưng con số đó nói dối, vì hai bên không hứa cùng một điều Đo RabbitMQ và Kafka cạnh nhau trên cùng một máy, chỉ ra chỗ phép so sánh không công bằng, bốn câu hỏi để chọn, và nhìn lại bốn mươi bài. 19/08/2026 · 8 phút đọc