使用响应式(Reactive)邮件程序,我试图坚持电子邮件是否成功。 下面是未唤醒的代码片段:
@Path("atendimentos")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class AtendimentoResource {
@Inject
AtendimentoHistoricoRepository atendimentoHistoricoRepository;
@Inject
ReactiveMailer mailer;
@GET
public Response findAll(@QueryParam("nome") String nome) {
AtendimentoHistorico atendimentoHistorico = new AtendimentoHistorico();
mailer.send(email).subscribe().with(success -> {
atendimentoHistorico.setEmailEnviado(true);
atendimentoHistoricoRepository.persist(atendimentoHistorico);
}, error -> {
});
}
}
这里是抛出的异常:
您试图在 IO 线程上执行阻塞操作。这是不允许的,因为阻塞 IO 线程将导致应用程序出现重大性能问题。如果您想执行阻塞 EntityManager 操作,请确保您是从工作线程执行此操作。
最佳答案
如果你想阻止,你应该使用io.quarkus.mailer.Mailer
而不是ReactiveMailer
。
@Path("atendimentos")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class AtendimentoResource {
@Inject
AtendimentoHistoricoRepository atendimentoHistoricoRepository;
@Inject
Mailer mailer;
@GET
public Response findAll(@QueryParam("nome") String nome) {
AtendimentoHistorico atendimentoHistorico = new AtendimentoHistorico();
mailer.send(email);
atendimentoHistorico.setEmailEnviado(true);
atendimentoHistoricoRepository.persist(atendimentoHistorico);
}
}
关于java - Reactive Mailer - IO 线程上的阻塞操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61796710/