Olá pessoal. Sou colaborador de uma empresa pública do estado do paraná, e tenho uma demanda específica em um software que está em fase de construção.
Gostaria de uma sugestão técnica de como implementar determinada solução. Tenho um serviço REST do tipo POST, que recebe em seu body um json no seguinte formato:
{
"cpfs": [ "<cpf_x>", "<cpf_y>" ... ],
"channel": [ "SMS", "EMAIL" ],
"messageTitle":"<mensagemTitle>",
"message":"<mensagem>",
}
Reparem que o field cpfs é um array. Como é um software que estou construindo do zero, preciso cuidar com um requisito não-funcional previamente mapeado, atrelado a categoria de performance. Levando em consideração o limite de 10 MB por default que pode ser trafegado (encapsulado no body da requisição), possivelmente terei uma solicitação com vários cpfs. Imaginem cerca de 40 à 50 mil cpfs informados nesse array.
A questão é, preciso notificar todos esses 50 mil cidadãos aproximadamente, enviando a mensagem para o canal informado (veja que nesse exemplo tenho dois, mas posso ter que notificar em até 4 canais), ou seja, é um processamento pesado. Além disso, pra cada cidadão (cada cpf), existem algumas regras de negócio (porém são poucas e bem simples).
Para mim está claro que devo realizar todo esse processamento de forma assíncrona (óbvio). Neste caso pretendo devolver um http 202 para o cliente, dizendo a ele que aceitei a solicitação e vou processar.
Porém a minha dúvida é, qual seria a melhor maneira de implementar tal processamento. Pensei em usar ExecutorService e separar todo esse processamento em várias Threads. Ou então, utilizar fila JMS.
Alguém teria alguma sugestão ?
Obrigado.