Spring集成错误“没有可用的输出通道或replyChannel标头”

2024-01-02

我不知道为什么我会得到例外

Caused by: org.springframework.messaging.core.DestinationResolutionException: no output-channel or replyChannel header available

它只是一个简单的 IntegrationFlow,但不确定下面的代码中我缺少什么。

  @Bean
  Exchange messageExchange() {
    return ExchangeBuilder
        .directExchange("attr")
        .durable(true)
        .build();
  }

  @Bean
  Queue queue() {
    return QueueBuilder
        .durable("attr_queue")
        .build();
  }

  @Bean
  Binding binding() {
    return BindingBuilder
        .bind(queue())
        .to(messageExchange())
        .with("attr_queue")
        .noargs();
  }

  @Bean
  IntegrationFlow deltaFlow(ConnectionFactory connectionFactory) {
    return IntegrationFlows.from(Amqp
        .inboundAdapter(connectionFactory, queue()))
        .handle(String.class, (payload, headers) -> {
          if (payload.isEmpty()) {
            log.info("Payload empty");
          } else {
            log.info("Payload : " + payload);
          }
          return payload;
        })
        .get();
  }

我试图接触 Spring Integration,但不确定为什么会出现此异常。我想做的就是使用从队列中读取inboundAdapter并将其记录到控制台。代码运行正常,但是当我向队列发布消息时,出现此异常。我必须指定一个replyChannel or output-channel使用时总是Amqp适配器?


不,这不是 AMQP 通道适配器问题。请看看你的handle()- 你在那里归还一些东西。之后没有任何东西可以处理该返回。那么,回复应该去哪里呢?对了,进入replyChannel标头。但是等等,没有人,因为没有什么可以等待回复 - 通道适配器是单向组件。

由于您对回复不执行任何操作,并且框架无法从配置阶段假设您不会处理此回复,因此我们只是在运行时遇到该异常。它不能做出这个假设,因为在此之前有一个消息通道handle(),所以您可以发送消息replyChannel来自其他流的标头等等。但!由于这是您的代码并且您完全控制它,因此您可能会假设没有人会期望从那里得到答复,因此最好从此时停止流式传输。为此目的,最好使用单向MessageHandler- 基于handle()变体或只是返回null代替payload。您还可以使用channel(“nullChannel”)停止流式传输。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring集成错误“没有可用的输出通道或replyChannel标头” 的相关文章

随机推荐