Названия каналов интеграции не то, что я думаю, я настроил. Что дает? - PullRequest
0 голосов
/ 28 марта 2019

Похоже, что имя канала объединяется с результатом toString () оболочки приложения для создания фактического имени канала.

  1. Имеет ли это значение?
  2. Это как-то связано с ошибкой "Диспетчер не имеет подписчиков на канал", которую я преследую?
  3. Если так, что мне с этим делать?
  4. Если нет, то как мне найти фактическую ошибку, которую я преследую?

Название канала, в зависимости от создаваемого исключения, :

org.springframework.web.context.support.AnnotationConfigWebApplicationContext@78e22c75.outbound-requests

Мой код:

@Bean(name="outbound-requests")
public MessageChannel outboundRequestsChannel() {
    MessageChannel result = new DirectChannel();
    return result;
}

1 Ответ

2 голосов
/ 28 марта 2019
  1. Да, это важно. Ваше приложение может иметь несколько контекстов приложения. Допустим, отношения между родителями и детьми и ваши «дети» могут иметь одно и то же имя. Таким образом, войдите только имя компонента без идентификатора контекста приложения Соответствующий код выглядит так:

    /**
     * Returns the fully qualified channel name including the application context
     * id, if available.
     *
     * @return The name.
     */
     public String getFullChannelName() {
        if (this.fullChannelName == null) {
            String contextId = getApplicationContextId();
            String componentName = getComponentName();
            componentName = (StringUtils.hasText(contextId) ? contextId + "." : "") +
                    (StringUtils.hasText(componentName) ? componentName : "unknown.channel.name");
            this.fullChannelName = componentName;
        }
        return this.fullChannelName;
    }
    
  2. Нет, это не так. Такое исключение означает, что на момент отправки сообщения на этом канале нет подписанной конечной точки. Или у вас просто нет этого канала как input где-либо, или конечная точка была остановлена ​​между ними.

  3. Выясните, где вы используете этот канал в качестве входного или как возможно, что ваша возможная конечная точка остановлена.

  4. С точки зрения Framework невозможно определить, что вы хотели бы делать с этим каналом. DirectChannel - это тот тип реализации канала, который требует, чтобы подписчик был активным, прежде чем сообщение будет отправлено на этот канал.

Я ответил на все ваши вопросы, но до сих пор не ясно, какую цель вы преследуете, делясь с нами всей этой информацией.

В двух словах: у вас есть подписчик на этот канал и ваш Dispatcher has no subscribers for channel пойдет! Другими словами, речь идет о @ServiceActivator, @Transformer или соответствующей конфигурации XML или даже о Java DSL IntegrationFlow.

Чтобы решить вашу реальную проблему, нам нужно увидеть больше настроек вокруг этого outbound-requests определения канала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...