Taxa de Pesquisa do Consumidor com Akka, SQS e Camelo
Um projeto em que estou trabalhando requer a leitura de mensagens do SQS e decidi usar o Akka para distribuir o processamento dessas mensagens.
Como o SQS é suportado pelo Camel e existe uma funcionalidade incorporada para uso no Akka na classe Consumer, imaginei que seria melhor implementar o nó de extremidade e ler mensagens dessa maneira, embora eu não tenha visto muitos exemplos de pessoas fazendo isso.
Meu problema é que não posso pesquisar minha fila com rapidez suficiente para manter minha fila vazia ou quase vazia. O que eu pensava originalmente era que eu poderia fazer com que um Consumidor recebesse mensagens sobre o Camel do SQS a uma taxa de X / s. A partir daí, eu poderia simplesmente criar mais Consumidores para chegar à taxa em que eu precisava de mensagens processadas.
Meu consumidor:
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)
}
}
Como mostrado, eu configureidelay=1
assim como&maxMessagesPerPoll=10
para melhorar a taxa de mensagens, mas não consigo gerar vários consumidores com o mesmo endpoint.
Eu li nos documentos queBy default endpoints are assumed not to support multiple consumers.
e acredito que isso vale também para endpoints do SQS, já que gerar vários consumidores me dará apenas um consumidor onde, depois de executar o sistema por um minuto, a mensagem de saída éCount for actor: x
em vez dos outros que saemCount for actor: 0
.
Se isso é de todo útil; Consigo ler aproximadamente 33 mensagens / segundo com esta implementação atual no consumidor único.
Esta é a maneira correta de ler mensagens de uma fila do SQS no Akka? Em caso afirmativo, há alguma forma de conseguir que isso seja dimensionado para que eu possa aumentar minha taxa de consumo de mensagens para mais perto de 900 mensagens / segundo?