Avatar
0
Tien Sy Beginner
Tien Sy Beginner
Queue In Java Spring Boot
Hiện tại em đang muốn tạo queue trong java (chỉ dành riêng cho service java), nhằm mục đích để chứa các request và xử lý lần lượt. Em đang phân vân không biết nên sử dụng một số queue của java như LinkedList, ... hay sử dụng message broker như rabbit mq, kafka, ... Mong mọi người hỗ trợ giúp em ạ
Answer
Avatar
0
Nguyen Thai Son Beginner
Cách xử lý bất đồng bộ các message trong message queue
Hiện tại thì e đang design 1 cái architecture overview nhưng đang khá khoai ở chỗ việc xử lý bất đồng bộ đống message.<p> Bài toán đưa ra là: </p> <p> user upload file csv lên s3 </p> <p> s3 trigger lambda(producer) </p> <p> lambda (producer) gửi 1 cái message dạng như "starting: job_id" vào "Upsert" queue </p> <p> lambda (producer) lấy file csv và xử lý từng row (loop theo row) </p> <p> từng row khi map thành object sẽ được push lên 1 con queue "Upsert", hoặc nếu loop xong sẽ gửi 1 message dạng "ending: job_id" vào "Upsert" </p> <p> lambda khác sẽ lắng nghe cái queue "Upsert" và lấy từng object về để tiến hành update/insert vào db, nếu là các message dạng "starting", "ending" thì gửi thẳng qua queue "Success" </p> <p> Nếu object nào được update/insert thành công thì vào queue "Success" còn ngược lại thì vào "Failed" </p> <p> Con lambda (producer) sẽ lắng nghe 2 queue "Success" và "Failed" để xử lý từng message và tạo thành 1 file result_<job_id>.json chứa (failed_products: [] và success_products: []). </p> <p> Lúc đầu e tính là để con lambda consumer là single instance thì khi đó mọi thứ sẽ được đồng bộ với nhau, chắc chắn con lambda producer sẽ nhận được các message: [starting_job_id, ..., product, product, ..., ending_job_id] theo thứ tự. Nhưng mà manager bảo e là có thể spin up nhiều instance của con consumer để scale + xử lý nhanh hơn. </p> <p> Nếu lúc này có nhiều instance của lambda consumer thì việc con lambda producer nhận message theo kiểu: starting_job_id, product, ending_job_id, product, ... là hoàn toàn có thể xảy ra. </p> <p> Hiện tại có cách nào để có thể enforce được việc message: starting_job_id luôn ở đầu và message: ending_job_id luôn ở cuối vậy mấy thím. Kiến thức về cloud + architecture của e vẫn chưa được nhiều lắm :(:( </p> <p> Update cái ảnh diagram hiện tại (stackask k add media được nên em add tạm link này) </p> <a href="https://ibb.co/0GYvXKc" target="_blank">https://ibb.co/0GYvXKc</a>
Answer
Avatar
0
Hihi Teacher
Hihi Teacher
Đa luồng với Kafka Consumer
Tks a vì câu trả lời ! <p> </p> <p> Em có dùng <strong>@KafkaListener</strong> để nhận tin nhắn sau đó gửi gmail (tốn nhiều thời gian) cho user.Em dùng đa luồng cho chức năng này để giải quyết vấn đề treo thread khi xử lý trong listener (do listener mặc định có 1 thread ) </p> <p> </p> <p> Em có 2 lựa chọn : </p> <ol> <li>Như em nói ở trên dùng <strong>@Async</strong> và <strong>ThreadPool</strong></li> <li>Cấu hình số luồng của listener thông qua <strong><em>setConcurrency</em></strong> <em>(như bên dưới)</em></li> </ol> <pre>&lt;span&gt;@Bean&lt;/span&gt; public KafkaListenerContainerFactory&lt;ConcurrentMessageListenerContainer&lt;&lt;span&gt;String&lt;/span&gt;, &lt;span&gt;String&lt;/span&gt;&gt;&gt; kafkaListenerContainerFactory() { ConcurrentKafkaListenerContainerFactory&lt;&lt;span&gt;String&lt;/span&gt;, &lt;span&gt;String&lt;/span&gt;&gt; &lt;span&gt;factory&lt;/span&gt; = &lt;span&gt;new&lt;/span&gt; ConcurrentKafkaListenerContainerFactory&lt;&gt;(); &lt;span&gt;factory&lt;/span&gt;.setConsumerFactory(consumerFactory()); &lt;span&gt;factory&lt;/span&gt;.setConcurrency(&lt;span&gt;5&lt;/span&gt;); ...... } </pre> <p> </p> <p> Anh cho em hỏi 2 cách này có em nên dùng cách nào hiệu quả hơn và vì sao ạ hoặc n ếu anh có cách nào hay hơn  thì mong anh recommend cho em với ạ. </p>
Answer
Avatar
1
Lâm Văn Đời Beginner
Ưu /khuyết điểm của Message Queue
Chào mọi người, em có câu hỏi là: <p> </p> <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ì ạ ?
Answer
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
Thự tự tin nhắn trong Kafka
Chào mọi người, <p> </p> <p> Ví dụ trong Kafka e tạo <strong>1 topic</strong> gồm có  <strong>5 partition.</strong>Theo em hiểu thì khi 1 Consumer nhận message từ topic thì sẽ nhận được từ message từ tất cả partition của topic đó. </p> <ol> <li>Em muốn hỏi là <strong>Consumer</strong> khi nhận các message từ Kafka (<em>nhiều</em> <em>partition</em>) thì có <strong><em>đảm bảo đúng với với thứ tự được gửi</em></strong> không ạ ?</li> <li>Nếu câu 1 câu tra lời là  <strong>không</strong> đảm bảo thì có cách nào để <strong>đảm bảo</strong> nhận được các message <strong>theo thứ tự</strong> được gửi không ạ ? ( ví dụ 1 chức năng cần xử lý theo 1 tuần  tự nhất định)</li> </ol> <p> &nbsp; </p>
Answer
Avatar
1
tvd12 Enlightened
tvd12 Enlightened
EzyKafka khác gì thư viện kafka official?
Hi anh, anh có thể brief qua ezykafka của monkeys có điểm gì nổi bật hơn thư viện official k ạ. Em muốn hiểu rõ hơn về ưu điểm/nhược điểm của ezykafka mà k thấy docs có ghi?
Answer
Avatar
0
tvd12 Enlightened
tvd12 Enlightened
Start rabbitmq localhost với docker
Start rabbitmq localhost với docker
Answer
Avatar
0
Nguyễn Thái Sơn Professional
Nguyễn Thái Sơn Professional
kafka và lợi ích
Mục đích hiện tại a sử dụng Kafka để làm gì ạ, có nên thay thế bằng message queue khác như activeMQ k ạ ?
Answer