我有这个直接渠道:
@Bean
public DirectChannel emailingChannel() {
return MessageChannels
.direct( "emailingChannel")
.get();
}
我可以为同一个频道定义多个流吗?
@Bean
public IntegrationFlow flow1FromEmailingChannel() {
return IntegrationFlows.from( "emailingChannel" )
.handle( "myService" , "handler1")
.get();
}
@Bean
public IntegrationFlow flow2FromEmailingChannel() {
return IntegrationFlows.from( "emailingChannel" )
.handle( "myService" , "handler2" )
.get();
}
编辑
@Service
public class MyService {
public void handler1(Message<String> message){
....
}
public void handler2(Message<List<String>> message){
....
}
}
每个流的handle(...)
方法处理不同的payload
数据类型,但目标是相同的,即从通道读取数据并调用相关的处理程序。我想避免许多if...else
在一个处理程序中检查数据类型。
其他问题:当多个线程同时调用同一通道(无论其类型为Direct
,PubSub
或Queue
)时会发生什么(默认情况下,@Bean
具有单例范围)?
非常感谢
答案 0 :(得分:0)
具有直接渠道的消息将循环分发给消费者。
在队列通道中,只有一个消费者将收到每条消息;分布将基于各自的民意测验。
通过发布/订阅渠道,两个使用者都将收到每条消息。
您需要提供更多信息,但是听起来您需要在流中添加有效负载类型路由器,以将消息定向到正确的使用者。
编辑
当处理程序方法在同一类中时,您不需要两个流程;框架会检查这些方法,只要没有歧义,就会调用与有效负载类型匹配的方法。
.handle(myServiceBean())