Spring 集成错误 "no output-channel or replyChannel header available"
Spring Integration error "no output-channel or replyChannel header available"
我不确定为什么会出现异常
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 集成,但不确定为什么会出现此异常。我想要做的就是使用 inboundAdapter
从队列中读取并将其记录到控制台。代码运行良好,但是当我向队列发布消息时,出现此异常。使用 Amqp
适配器时是否必须始终指定 replyChannel
或 output-channel
?
不,那不是 AMQP 通道适配器问题。请看看你的 handle()
- 你 return 那里的东西。之后没有什么可以处理 return。那么,回复应该去哪里呢?对,进入replyChannel
header。但是等等,没有人,因为没有什么可以等待回复 - Channel Adapter 是 one-way 组件。
由于您不对回复执行任何操作,并且框架无法从配置阶段假设您不会处理此回复,因此我们只会在运行时出现该异常。它不能做出这样的假设,因为在 handle()
之前有一个消息通道,所以你可以从其他流发送带有 replyChannel
header 的消息等等。但!由于这是您的代码并且您完全控制它,您可能会假设没有人会期望从那里得到回复,最好从这一点停止流式传输。为此,最好使用基于 one-way MessageHandler
的 handle()
变体或仅使用 return null
而不是 payload
。您也可以使用 channel(“nullChannel”)
停止流式传输。
我不确定为什么会出现异常
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 集成,但不确定为什么会出现此异常。我想要做的就是使用 inboundAdapter
从队列中读取并将其记录到控制台。代码运行良好,但是当我向队列发布消息时,出现此异常。使用 Amqp
适配器时是否必须始终指定 replyChannel
或 output-channel
?
不,那不是 AMQP 通道适配器问题。请看看你的 handle()
- 你 return 那里的东西。之后没有什么可以处理 return。那么,回复应该去哪里呢?对,进入replyChannel
header。但是等等,没有人,因为没有什么可以等待回复 - Channel Adapter 是 one-way 组件。
由于您不对回复执行任何操作,并且框架无法从配置阶段假设您不会处理此回复,因此我们只会在运行时出现该异常。它不能做出这样的假设,因为在 handle()
之前有一个消息通道,所以你可以从其他流发送带有 replyChannel
header 的消息等等。但!由于这是您的代码并且您完全控制它,您可能会假设没有人会期望从那里得到回复,最好从这一点停止流式传输。为此,最好使用基于 one-way MessageHandler
的 handle()
变体或仅使用 return null
而不是 payload
。您也可以使用 channel(“nullChannel”)
停止流式传输。