Boa tarde!!
Para definir quantas threads e quantas mensagens cada thread irá processar, nós podemos fazer dessa forma:
// Definir um numero exato de quantas threads eu gostaria de criar
ExecutorService newFixedThreadPool = Executors.newFixedThreadPool(2);
/*
* Segundo parametro: numero de quantas mensagens eu vou processar por vez
*/
SubmissionPublisher<NotaFiscal> publisher = new SubmissionPublisher<>(newFixedThreadPool, 3);
Mas conforme mostrado na aula, nós podemos criar o nosso próprio subscribe personalizado implementando a interface Subscriber, e com isso podemos utilizar o método request para especificar quantas mensagens minha thread vai processar, no meu caso abaixo adicionei três mensagens
public class NotaFiscalSubscribe implements Subscriber<NotaFiscal> {
private Subscription subscription;
@Override
public void onSubscribe(Subscription subscription) {
System.out.println("Chamando o onSubscribe!!");
this.subscription = subscription;
this.subscription.request(3);
}
}
Minha dúvida seria a seguinte: Existe uma outra maneira de fazer a implementação acima passando também o número de threads que eu gostaria que fosse criado?
Tentei fazer da forma abaixo, porém parece que não surgiu nenhum efeito, sou obrigado a utilizar o método request para que as mensagens sejam processadas, logo se eu não utilizar esse método nenhuma mensagem será processada.
Classe onde implementa a interface Subscriber
public class NotaFiscalSubscribe implements Subscriber<NotaFiscal> {
private Subscription subscription;
@Override
public void onSubscribe(Subscription subscription) {
System.out.println("Chamando o onSubscribe!!");
this.subscription = subscription;
}
}
Classe principal
public class TesteEnvioNaoBloqueante {
public static void main(String[] args) {
// Definir um numero de quantas threads eu gostaria de criar
ExecutorService newFixedThreadPool = Executors.newFixedThreadPool(2);
NotaFiscal primeiraNotaFiscal = new NotaFiscal(">> Joao", 39.99, LocalDate.now());
/*
* Segundo parametro: número de quantas mensagens cada thread vai poder processar
*/
SubmissionPublisher<NotaFiscal> publisher = new SubmissionPublisher<>(newFixedThreadPool, 3);
NotaFiscalSubscribe subscribe = new NotaFiscalSubscribe();
publisher.subscribe(subscribe);
publisher.submit(primeiraNotaFiscal);
System.out.println("Voca ira receber a nota fiscal no seu e-mail");
Scanner scan = new Scanner(System.in);
scan.nextLine();
scan.close();
publisher.close();
}
}
Adicionei também o código no github para facilitar a compreensão da dúvida: link para o github