Spring 具有两个来源的集成流程
Spring integration flow with two sources
我尝试创建一个流,它从 2 个源(1 个 mqtt 和一个来自用户服务交互)获取消息,并生成消息到另一个 mqtt。
事实上,我尝试使用这个答案:
这是我的结果:
@Bean
public IntegrationFlow mqttInFlow() {
return IntegrationFlows.from(mqttInbound())
.channel("mainMessageChannel")
.get();
}
@Bean
public IntegrationFlow mqttTestMessageFlow() {
return IntegrationFlows.from(messageService.testInbound())
.channel("mainMessageChannel")
.get();
}
@Bean
public IntegrationFlow mainMessageFlow() {
return IntegrationFlows.from("mainMessageChannel")
.handle(eventServiceHandler())
.split(operationSplitter())
.handle(mqttOutbound())
.get();
}
但是我有以下错误:
java.lang.IllegalStateException: 'outputChannel' or 'outputChannelName' is required
at org.springframework.util.Assert.state(Assert.java:70)
at org.springframework.integration.endpoint.MessageProducerSupport.afterSingletonsInstantiated(MessageProducerSupport.java:136)
嗯,你必须在那些 MessageProducerSupport
定义中使用它,而不是像 channel("mainMessageChannel")
:
@Bean
MessageProducerSupport mqttInbound() {
...
adapter.setOutputChannelName("mainMessageChannel");
...
}
@Bean
MessageProducerSupport testInbound() {
...
adapter.setOutputChannelName("mainMessageChannel");
...
}
或者...只是不要 @Bean
对它们进行注释,Java DSL 会处理它们的声明!
我尝试创建一个流,它从 2 个源(1 个 mqtt 和一个来自用户服务交互)获取消息,并生成消息到另一个 mqtt。
事实上,我尝试使用这个答案:
这是我的结果:
@Bean
public IntegrationFlow mqttInFlow() {
return IntegrationFlows.from(mqttInbound())
.channel("mainMessageChannel")
.get();
}
@Bean
public IntegrationFlow mqttTestMessageFlow() {
return IntegrationFlows.from(messageService.testInbound())
.channel("mainMessageChannel")
.get();
}
@Bean
public IntegrationFlow mainMessageFlow() {
return IntegrationFlows.from("mainMessageChannel")
.handle(eventServiceHandler())
.split(operationSplitter())
.handle(mqttOutbound())
.get();
}
但是我有以下错误:
java.lang.IllegalStateException: 'outputChannel' or 'outputChannelName' is required
at org.springframework.util.Assert.state(Assert.java:70)
at org.springframework.integration.endpoint.MessageProducerSupport.afterSingletonsInstantiated(MessageProducerSupport.java:136)
嗯,你必须在那些 MessageProducerSupport
定义中使用它,而不是像 channel("mainMessageChannel")
:
@Bean
MessageProducerSupport mqttInbound() {
...
adapter.setOutputChannelName("mainMessageChannel");
...
}
@Bean
MessageProducerSupport testInbound() {
...
adapter.setOutputChannelName("mainMessageChannel");
...
}
或者...只是不要 @Bean
对它们进行注释,Java DSL 会处理它们的声明!