Dự án tôi đang thực hiện yêu cầu đọc thư từ SQS và tôi quyết định sử dụng Akka để phân phối việc xử lý các thư này.Tỷ lệ thăm dò của người tiêu dùng với Akka, SQS và Camel
Vì SQS được hỗ trợ bởi Camel và có chức năng được tích hợp để sử dụng trong Akka trong lớp Người tiêu dùng, tôi tưởng tượng tốt nhất là triển khai điểm cuối và đọc thư theo cách này, mặc dù tôi không thấy nhiều ví dụ mọi người làm như vậy.
Vấn đề của tôi là tôi không thể thăm dò ý kiến xếp hàng của mình đủ nhanh để giữ cho hàng đợi trống hoặc gần trống. Điều tôi nghĩ ban đầu là tôi có thể nhờ Người tiêu dùng nhận tin nhắn qua Camel từ SQS với tốc độ X/s. Từ đó, tôi có thể đơn giản tạo ra nhiều Người tiêu dùng hơn để đạt được tốc độ mà tại đó tôi cần thông báo được xử lý.
tiêu dùng của tôi:
import akka.camel.{CamelMessage, Consumer}
import akka.actor.{ActorRef, ActorPath}
class MyConsumer() extends Consumer {
def endpointUri = "aws-sqs://my_queue?delay=1&maxMessagesPerPoll=10&accessKey=myKey&secretKey=RAW(mySecret)"
var count = 0
def receive = {
case msg: CamelMessage => {
count += 1
}
case _ => {
println("Got something else")
}
}
override def postStop(){
println("Count for actor: " + count)
}
}
Như đã trình bày, tôi đã thiết delay=1
cũng như &maxMessagesPerPoll=10
để cải thiện tốc độ của bài viết, nhưng tôi không thể đẻ trứng nhiều người tiêu dùng với các thiết bị đầu cuối cùng.
Tôi đọc trong tài liệu By default endpoints are assumed not to support multiple consumers.
và tôi tin rằng điều này cũng đúng với điểm cuối SQS, vì sinh sản nhiều người tiêu dùng sẽ chỉ cho tôi một người tiêu dùng sau khi chạy hệ thống trong một phút, thông báo đầu ra là Count for actor: x
thay vì những sản phẩm khác xuất ra Count for actor: 0
.
Nếu điều này hữu ích; Tôi có thể đọc khoảng 33 tin nhắn/giây với việc triển khai hiện tại này trên một người tiêu dùng duy nhất.
Đây có phải là cách thích hợp để đọc thư từ hàng đợi SQS trong Akka không? Nếu vậy, có cách nào tôi có thể nhận được điều này để mở rộng quy mô ra ngoài để tôi có thể tăng tỷ lệ tiêu thụ tin nhắn của tôi gần hơn với 900 tin nhắn/giây?