弹簧集成错误"no output-channel or replyChannel header available"



>我不确定为什么我会收到异常

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

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

@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();
}

我试图获得弹簧集成,但不确定为什么会出现此异常。我要做的就是使用inboundAdapter从队列中读取,然后将其记录到控制台。代码运行良好,但是当我将消息发布到队列时,出现此异常。使用Amqp适配器时,是否必须始终指定replyChanneloutput-channel

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

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

最新更新