Каналы сообщений один или многие?

Мне нужно обрабатывать электронные письма примерно из 30 адресов. Я реализую это так, чтобы все электронные письма отправлялись в один DirectChannel и после Receiver . В Receiver я могу понять, из какого адреса приходит сообщение, для этого я создаю CustomMessageSource который обертывает javax.mail.Message моему собственному типу, который содержит javax.mail.Message и некоторый Enum . Похоже, это не очень хорошее решение, потому что я могу использовать @Transformer , но как я могу его использовать, если у меня есть только 1 канал?

Это был первый вопрос.

Второй вопрос:

Должен ли я использовать один канал и один приемник для всех этих адресов? Или лучше иметь канал и приемник для каждого почтового адреса? Я не понимаю Весны так глубоко, чтобы почувствовать разницу.

ps этот вопрос является продолжением Spring imapAdapter

    В каждом дочернем контексте вы можете добавить заголовок, чтобы настроить пользовательский заголовок на URL-адрес от адаптера; причем выходной канал является совместно используемым каналом для общей услуги.

    В службе используйте void foo(Message emailMessage, @Header("myHeader") String url)

    Обычно я рекомендую использовать одну услугу, если только служба не должна делать радикально разные вещи на основе источника.

    EDIT :

    Я изменил свой ответ на ваш предыдущий вопрос, чтобы улучшить исходное сообщение с URL-адресом в заголовке; каждый экземпляр имеет свой собственный заголовок, и все они маршрутизируют обогащенное сообщение в общий emailChannel .

     @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 mailMessageSource(MailReceiver imapMailReceiver) { return new MailReceivingMessageSource(imapMailReceiver); } @Bean public MessageChannel enrichHeadersChannel() { return new DirectChannel(); } @Bean @Transformer(inputChannel="enrichHeadersChannel", outputChannel="emailChannel") public HeaderEnricher enrichHeaders() { Map> 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; } } 

    … и я изменил приемную службу, чтобы получить доступ к заголовку …

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

    …надеюсь, это поможет.

    EDIT 2 :

    И это немного сложнее; он вытаскивает из полезной нагрузки и помещает его в заголовок; не нужен для вашего случая использования, так как у вас есть полное сообщение, но оно иллюстрирует технику …

     @Bean @Transformer(inputChannel="enrichHeadersChannel", outputChannel="emailChannel") public HeaderEnricher enrichHeaders() { Map> headersToAdd = new HashMap<>(); headersToAdd.put("emailUrl", new StaticHeaderValueMessageProcessor(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; } 

    а также

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

    Как пользователи / разработчики могут установить конфигурацию прокси-сервера Android для версий 2.x?

    Правильный синтаксис структуры для Pascal, если затем начать конец; (в Inno Setup)

    Одна таблица Mysql с несколькими столбцами TIMESTAMP

    Список и подсчет уникальных слов из документа Word

    Вызов startIntentSenderForResult из fragmentа (Android Billing v3)

    Неустранимая ошибка среды выполнения Java

    Найти элемент WPF внутри DataTemplate в коде

    Почему моя таблица страниц занимает столько памяти?

    Crash или «segmentation fault», когда данные копируются / отсканированы / прочитаны неинициализированному указателю

    Получить права администраторов в Windows 7, когда нет учетной записи администратора

    Как получить список пользователей, которые вошли в систему на удаленном компьютере?

    Изменение поисковой системы по умолчанию для адресной строки Firefox

    Обход VPN для определенных приложений

    Что делать с резервными копиями в Windows 10

    почему он использует movl вместо push?

    Давайте будем гением компьютера.