0
메시지를 읽으면 스프링 메일 인바운드 채널 어댑터를 사용하여 메일을 읽습니다. 해당 채널의 서비스 활성화 프로그램에서 일부 db 작업을 수행하고 있습니다. 내 요구 사항은 DB 작업이 실패하면 어댑터가 동일한 메시지를 다시 읽어야한다는 것입니다.스프링 통합 인바운드 채널 어댑터를 사용할 때 메시지를 다시 다운로드
메일 구성 :
@Bean
public DirectChannel inputChannel() {
return new DirectChannel();
}
@Bean
public IntegrationFlow pop3MailFlow() {
String url = "[url]";
return IntegrationFlows
.from(Mail.pop3InboundAdapter(url)
.javaMailProperties(p -> p.put("mail.pop3.socketFactory.class", "javax.net.ssl.SSLSocketFactory")),e -> e.autoStartup(true)
.poller(Pollers.fixedDelay(2000).transactionSynchronizationFactory(transactionSynchronizationFactory())))
.channel(inputChannel())
.handle(inboundEmailProcessor(),"messageProcess")
.get();
}
@Bean
public InboundEmailProcessor inboundEmailProcessor() {
return new InboundEmailProcessor();
}
@Bean
public TransactionSynchronizationFactory transactionSynchronizationFactory() {
TransactionSynchronizationFactory synchronizationFactory = new DefaultTransactionSynchronizationFactory(expressionEvaluatingTransactionSynchronizationProcessor());
return synchronizationFactory;
}
@Bean
public ExpressionEvaluatingTransactionSynchronizationProcessor expressionEvaluatingTransactionSynchronizationProcessor() {
ExpressionEvaluatingTransactionSynchronizationProcessor processor = new ExpressionEvaluatingTransactionSynchronizationProcessor();
ExpressionParser parser = new SpelExpressionParser();
processor.setAfterRollbackExpression(parser.parseExpression("new com.muraai.ex.config.Exp().process(payload)"));
return processor;
}
public class InboundEmailProcessor {
@Autowired
AttachmentsRepository attachmentsRepository;
@Transactional(rollbackFor = Exception.class)
public void messageProcess() {
// some db operations
// if it fails the same message should be read again
}
}
나는이 작동하지만 작동하지 않을 거라 생각 했어요. 내 요구 사항을 달성 할 수있는 방법이 있습니까
public class Exp {
public void process(MimeMessage message) throws MessagingException {
message.setFlag(Flags.Flag.SEEN, false);
}
}
감사합니다. 내 구성을 IMAP으로 변경했지만 여전히 작동하지 않습니다. –