Avatar
1
Lâm Văn Đời Beginner
Hỏi về việc gửi tin nhắn qua Message Queue (RabbitMQ,Kafka)
<em>Xin chào mọi người,</em> <p> </p> <p> Theo em được biết thì trong 1 hệ thống <em><strong>Microservices</strong> </em>thì các chức năng như gửi Mail, SMS cho khách hàng thì sẽ được tách thành 1 service mới.Khi cần gửi mail thì sẽ gửi 1 message đến MQ trung gian (Kafka,RabbitMQ,..) chứ không gửi theo kiểu request như thông thường. </p> <p> </p> <p> Em có tìm hiểu nhưng cách giải thích của mọi người trên mạng vẫn làm em mơ hồ chưa hiểu rõ cho lắm.Em chỉ hiểu đơn giản là gửi message qua 1 MQ trung gian như vậy thì đỡ tốn thời gian hơn so với bình thường vì sẽ gửi 1 cách<em><strong> bất đồng bộ</strong></em> và không cần phản hồi từ service đã gửi.Theo em nghĩ thì việc áp dụng 1 MQ trung gian như vậy chắc chắn sẽ có rất nhiều lợi ích.Nên em đặt câu hỏi ở đây và  mong được anh chị có kinh nghiệm giải đáp giúp em ạ. </p> <p> </p> <p> Em có câu hỏi là : </p> <ol> <li>Ngoài service như gửi Mail, SMS thì trong thực tế các service có chức năng kiểu như thế nào thì nên áp dùng kiểu gửi message thông qua MQ như trên vậy ạ? Cho em xin 1 số ví dụ cụ thể với ạ.</li> <li>Vì sao trong thức tế người lại dùng đến các MQ như Kafka, RabbitMQ vậy ạ ?</li> <li><strong>Tất cả ưu điểm/khuyết điểm (nếu có)</strong> của mẫu thiết kế gửi message 1 cách bất đồng bộ qua MQ trung gian là gì ạ ?</li> </ol> <p> Em cảm ơn mọi người rất nhiều ạ ! </p>
Answer
Avatar
1
Hihi Teacher
Hihi Teacher
Gửi email trong Spring Boot và RabbitMQ
Hi xin chào mọi người! <p> </p> <p> Hiện tại em đang tìm hiểu về RabbitMQ sẵn tiện làm thử ứng dụng phổ biến nhất là gửi email dùng Spring + RabbitMQ. </p> <p> </p> <p> Em đang bật chế độ <strong>manual</strong> cho <strong>ack </strong>khi nhận tin nhắn từ RabbitMQ ở RabbitListener </p> <p> </p> <p> Luồng xử lý của em cơ bản là như thế này: </p> <ul> <li>Khi gửi mail thành công sẽ gọi câu lệnh <em><strong>basic.Ack </strong></em>để thông báo là nhận thành công và RMQ sẽ xóa tin nhắn đó khỏi Queue.</li> <li>Khi gửi thất bại (nhảy vào catch) thì sẽ gọi câu lệnh <em><strong>basic.Nack </strong></em>để gửi tin nhắn trở lại Queue.</li> </ul> <p> Nhưng vấn đề em gặp phải là nếu gọi câu lệnh <em><strong>basic.Nack  </strong></em>thì sẽ bị 1 vòng lặp vô tận =&gt; tin nhắn khi requeue xong lại nhận xong lại requeue vô tận. </p> <p> </p> <p> Mọi người cho em hỏi là trong trường hợp của em thì nên xử lý như thế nào là ổn nhất với tin nhắn đang bị lỗi đó ạ (Tại vì nếu loop vô tận như v thì sẽ ko ổn tí nào).Có nên lưu tin nhắn ở đâu đó xong 1 khoảng thời gian sau resend 1 số lần nhất định thì có được không ạ? </p> <p> </p> <p> Cảm ơn mọi người! </p> <p> </p> <code></code>
Answer
Avatar
0
tvd12 Enlightened
tvd12 Enlightened
Start rabbitmq localhost với docker
Start rabbitmq localhost với docker
Answer
Avatar
1
Senior Inter Beginner
Senior Inter Beginner
So sánh RabbitMQ và gRPC
Hello mọi người, trong quá trình tìm hiểu RabbitMQ và gRPC, mình vẫn chưa phân biệt được khi nào nên dùng 1 trong 2 thằng này. Ai có kinh nghiệm có thể chia sẻ lại cho mình với ạ. Thanks !!!
Answer