GET Http 메서드를 통해 사용자가 person 개체를 요청하는 웹 서비스가 있습니다. 이 사람은 JMS 대기열로 보내지고 나서 Spring Integration 덕분에 가짜 이메일 주소 (https://papercut.codeplex.com/)로 보냅니다. 스프링 통합 Java DSL로 코드를 작성했습니다.스프링 통합 전자 메일 재 배달 (예외시)
이메일 메시지를보다 유연하게 보낼 수있는 방법이 있습니까?
예외가 발생하면 Spring Integration을 사용하여 메일을 어떻게 재전송 할 수 있습니까?
public Person findById(Integer id) { Person person = jpaPersonRepository.findOne(id); jmsTemplate.convertAndSend("testQueue", person); return jpaPersonRepository.findOne(id); }
자바 Confiuration
웹 서비스 : 여기 내 코드 (5 회 예와이 후 전송되지 않은 경우 예외가 처리됩니다 프로그램이 중지)
@Configuration @EnableIntegration @ComponentScan public class JavaConfig { private static final String DEFAULT_BROKER_URL = "tcp://localhost:61616"; private static final String DEFAULT_QUEUE = "testQueue"; @Bean public ActiveMQConnectionFactory connectionFactory() { ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(); connectionFactory.setBrokerURL(DEFAULT_BROKER_URL); return connectionFactory; } @Bean public JmsTemplate jmsTemplate() { JmsTemplate template = new JmsTemplate(); template.setConnectionFactory(this.connectionFactory()); template.setDefaultDestinationName(DEFAULT_QUEUE); return template; } @Bean public DefaultMessageListenerContainer defaultMessageListenerContainer() { DefaultMessageListenerContainer defaultMessageListenerContainer = new DefaultMessageListenerContainer(); defaultMessageListenerContainer.setDestinationName(DEFAULT_QUEUE); defaultMessageListenerContainer.setConnectionFactory(this.connectionFactory()); return defaultMessageListenerContainer; } @Bean(name="inputChannel") public DirectChannel directChannel() { return new DirectChannel(); } @Bean public IntegrationFlow orders() { return IntegrationFlows .from(Jms.messageDrivenChannelAdapter(defaultMessageListenerContainer())) .transform(new ObjectToStringTransformer()) .enrichHeaders(p -> p.header(MailHeaders.TO, "[email protected]")) .handle(Mail.outboundAdapter("127.0.0.1") .credentials("test","test").port(25) .javaMailProperties(p -> p.put("mail.debug", "true")), e -> e.id("sendMailEndpoint")) .get(); } }
감사합니다. 당신의 대답은 분명했습니다. .advice (retryAdvice())는 특히 많은 도움이되었습니다. – user3590899