集成通道名称不是我认为我配置的。是什么赋予了?

问题描述 投票:0回答:1

看来,通道名称与应用程序包装器的toString()结果连接在一起,以创建实际的通道名称。

  1. 这有关系吗?
  2. 这与“Dispatcher没有订阅者频道”错误有关吗我正在追逐?
  3. 如果是这样,我该怎么办呢?
  4. 如果没有,我如何找到我追逐的实际错误?

根据抛出的异常,通道的名称是:

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

我的代码是:

@Bean(name="outbound-requests")
public MessageChannel outboundRequestsChannel() {
    MessageChannel result = new DirectChannel();
    return result;
}
spring spring-integration
1个回答
2
投票
  1. 是的,这很重要。您的应用程序可能有多个应用程序上下文。假设父/子关系和您的“孩子”可能具有相同的bean名称。因此,只登录没有应用程序上下文ID的bean名称。相关代码是这样的: /** * 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通道定义周围看到更多配置。

© www.soinside.com 2019 - 2024. All rights reserved.