Trong quá trình sử dụng RabbitMQ, một số kịch bản kinh doanh yêu cầu chúng ta đảm bảo tiêu thứ tự tiêu thụ. Ví dụ, trong một kịch bản kinh doanh khi ba thông điệp được tạo ra để thực hiện các thao tác thêm, sửa đổi và xóa dữ liệu, nếu thứ tự tiêu thụ không được đảm bảo, thứ tự thực thi có thể trở thành xóa, sửa đổi, thêm, dẫn đến sự không gọn gàng.

Như dưới đây:

Vấn đề về thứ tự thông điệp trong RabbitMQ cần được xem xét từ ba khía cạnh: thứ tự gửi thông điệp, thứ tự thông điệp trong hàng đợi và thứ tự tiêu thụ thông điệp.

Thứ tự gửi thông điệp

Thứ tự truyền thông điệp tại điểm gửi thông điệp không cần thiết khi phần lớn doanh nghiệp. Không quan trọng ai gửi thông điệp trước. Nếu một doanh nghiệp yêu cầu thông điệp được gửi theo thứ tự, điều này có nghĩa là chỉ có một thông điệp có thể được gửi vào một thời điểm với khóa toàn cục, và thông điệp không thể được gửi cùng một lúc.

Thứ tự thông điệp trong hàng đợi

Trong RabbitMQ, thông điệp cuối cùng sẽ được lưu trữ trong một hàng đợi. Trong cùng một hàng đợi, thông điệp được sắp xếp dựa trên nguyên tắc "đầu vào, đầu ra", điều này được đảm bảo bởi RabbitMQ và thường không cần quan tâm đối với các nhà phát triển.

Lưu ý: Thứ tự của các thông điệp trong các hàng đợi khác nhau không được đảm bảo. Ví dụ, khi vào một ga tàu điện ngầm, nếu bạn tham gia một trong ba hàng đợi, thứ tự vào ga không thể đảm bảo giữa các hàng đợi khác nhau.

Thứ tự tiêu thụ thông điệp

Khi thảo luận về cách đảm bảo thứ tự các thông điệp, chúng ta thường đề cập đến thứ tự mà người tiêu thụ tiêu thụ các thông điệp. Trong các tình huống mà nhiều người tiêu thụ tiêu thụ thông điệp từ cùng một hàng đợi thông điệp, thường không thể đảm bảo thứ tự tiêu thụ thông điệp. Như đã chỉ ra trong sơ đồ mở đầu, mặc dù các thông điệp trong hàng đợi thông điệp được sắp xếp, nhiều người tiêu thụ tiêu thụ thông điệp đồng thời, tốc độ lấy thông điệp, tốc độ thực thi logic kinh doanh và các ngoại lệ thực thi có thể dẫn đến thứ tự thông điệp không nhất quán.

Ví dụ: Các thông điệp A, B và C được thêm vào hàng đợi theo thứ tự. Người tiêu thụ A1 nhận thông điệp A, và người tiêu thụ B1 nhận thông điệp B. Tuy nhiên, nếu người tiêu thụ B1 thực thi nhanh hơn, có thể hoàn thành trước người tiêu thụ A1, hoặc nếu người tiêu thụ A1 gặp lỗi, cả hai tình huống đều có thể dẫn đến thứ tự không nhất quán của thông điệp.

Giải pháp điển hình cho vấn đề tiêu thụ theo thứ tự là một hàng đợi chỉ có một người tiêu thụ Theo cách này, các thông điệp có thể được xử lý một cách tuần tự. Nhược điểm là khả năng đồng thời giảm đi, và việc tiêu thụ thông điệp đồng thời không khả thi. Đây là một sự đánh đổi.

Lưu ý: Nếu doanh nghiệp yêu cầu tiêu thụ theo thứ tự và tăng tính đồng thời, một cách tiếp cận phổ biến là cho phép nhiều hàng đợi. Doanh nghiệp có thể phân phối thông điệp vào các hàng đợi khác nhau dựa trên các quy tắc, qua đó tăng cường mức độ đồng thời. Ví dụ, trong kịch bản đặt hàng thương mại điện tử, chỉ cần đảm bảo thứ tự của các thông điệp đặt hàng cho cùng một người dùng. Các thông điệp thuộc về các người dùng khác nhau có thể được điều hướng đến các hàng đợi khác nhau.