Я использую Feign для подключения двух микросервисов. Один из них составляет письмо, а другой отправляет его.
Это почтовый клиент:
@FeignClient("holiday-client")
public interface EmailClient {
@RequestMapping(value = "/api/email/sendEmail", method = RequestMethod.POST)
void sendEmail(@RequestBody Email email);
}
Сервис, на котором составляется письмо:
@Service
public class EmailService {
@Autowired
private EmailClient emailClient;
public void sendEmailForNewCampaign() {
String to, subject, body;
to = "[email protected]";
subject = "A new campaign has started";
body = "This email has the purpose to inform you that a new campaign has been started. Please start your own performance reviews until it ends.";
Email email = new Email(to, subject, body);
emailClient.sendEmail(email);
}
}
И контроллер из другого микросервиса, который фактически отправляет электронное письмо:
@RestController
public class EmailController {
@Autowired
private EmailSender emailSender;
@RequestMapping(value = "/api/email/sendEmail", method = RequestMethod.POST)
public ResponseEntity sendEmail(@RequestBody Email email) {
System.out.println(email); //printed 5 times
emailSender.sendMail(email.getTo(), email.getSubject(), email.getBody());
return new ResponseEntity(HttpStatus.ACCEPTED);
}
}
Кажется, что этот API вызывается 5 раз, пока письмо не будет обработано и отправлено. Это работает, потому что я получаю 5 электронных писем, но я также получил исключение SocketTimeOutException. Проблема в том, что клиент слишком долго ждет, пока служба электронной почты отправит почту, а я этого не хочу. Как я могу переместить метод sendMail в поток, чтобы решить эту проблему?