tengo señal recargue qué liberacion directv código codigo email spring-boot spring-integration channel

email - señal - ¿Canales de mensajes uno o muchos?



qué es el código 721 de directv (1)

En cada contexto secundario, puede agregar un enriquecedor de encabezado para establecer un encabezado personalizado a la URL desde el adaptador; siendo el canal de salida el canal compartido para el servicio compartido.

En el servicio, use void foo(Message emailMessage, @Header("myHeader") String url)

En general, recomendaría usar un solo servicio a menos que el servicio necesite hacer cosas radicalmente diferentes según la fuente.

EDITAR :

Modifiqué mi respuesta a su pregunta anterior para mejorar el mensaje original con la url en un encabezado; cada instancia tiene su propio enriquecedor de encabezado y todos enrutan el mensaje enriquecido al emailChannel común.

@Configuration @EnableIntegration public class GeneralImapAdapter { @Value("${imap.url}") String imapUrl; @Bean public static PropertySourcesPlaceholderConfigurer pspc() { return new PropertySourcesPlaceholderConfigurer(); } @Bean @InboundChannelAdapter(value = "enrichHeadersChannel", poller = @Poller(fixedDelay = "10000") ) public MessageSource<javax.mail.Message> mailMessageSource(MailReceiver imapMailReceiver) { return new MailReceivingMessageSource(imapMailReceiver); } @Bean public MessageChannel enrichHeadersChannel() { return new DirectChannel(); } @Bean @Transformer(inputChannel="enrichHeadersChannel", outputChannel="emailChannel") public HeaderEnricher enrichHeaders() { Map<String, ? extends HeaderValueMessageProcessor<?>> headersToAdd = Collections.singletonMap("emailUrl", new StaticHeaderValueMessageProcessor<>(this.imapUrl)); HeaderEnricher enricher = new HeaderEnricher(headersToAdd); return enricher; } @Bean public MailReceiver imapMailReceiver() { MailReceiver receiver = mock(MailReceiver.class); Message message = mock(Message.class); when(message.toString()).thenReturn("Message from " + this.imapUrl); Message[] messages = new Message[] {message}; try { when(receiver.receive()).thenReturn(messages); } catch (MessagingException e) { e.printStackTrace(); } return receiver; } }

... y modifiqué el servicio de recepción para que tenga acceso al encabezado ...

@MessageEndpoint public class EmailReceiverService { @ServiceActivator(inputChannel="emailChannel") public void handleMessage(Message message, @Header("emailUrl") String url) { System.out.println(message + " header:" + url); } }

...Espero que ayude.

EDITAR 2 :

Y este es un poco más sofisticado; extrae el de la carga útil y lo coloca en un encabezado; no es necesario para su caso de uso ya que tiene el mensaje completo, pero ilustra la técnica ...

@Bean @Transformer(inputChannel="enrichHeadersChannel", outputChannel="emailChannel") public HeaderEnricher enrichHeaders() { Map<String, HeaderValueMessageProcessor<?>> headersToAdd = new HashMap<>(); headersToAdd.put("emailUrl", new StaticHeaderValueMessageProcessor<String>(this.imapUrl)); Expression expression = new SpelExpressionParser().parseExpression("payload.from[0].toString()"); headersToAdd.put("from", new ExpressionEvaluatingHeaderValueMessageProcessor<>(expression, String.class)); HeaderEnricher enricher = new HeaderEnricher(headersToAdd); return enricher; }

y

@ServiceActivator(inputChannel="emailChannel") public void handleMessage(Message message, @Header("emailUrl") String url, @Header("from") String from) { System.out.println(message + " header:" + url + " from:" + from); }

Necesito manejar correos electrónicos de aproximadamente 30 direcciones. Implemento esto de una manera donde todos los correos electrónicos van a un DirectChannel y luego a Receiver . En Receiver puedo entender de qué dirección viene el mensaje, para hacer esto creo CustomMessageSource que envuelve javax.mail.Message a mi propio tipo que contiene javax.mail.Message y algo de Enum . Parece que esta no es una buena decisión, porque puedo usar @Transformer , pero ¿cómo puedo usarlo si solo tengo 1 canal?

Esa fue la primera pregunta.

Segunda pregunta:

¿Debo usar UN canal y UN receptor para todas esas direcciones? ¿O mejor tener canal y receptor para cada dirección de correo? No entiendo a Spring tan profundamente como para sentir la diferencia.

ps esta pregunta es la continuación de Spring multiple imapAdapter