是Spring Integration的新手
我的目标是将消息传递到另一个频道(链接过程)
频道1 ---> chennal2 - > chennal3 ---> chennal4。 (Msg1)(Msg2)(Msg3)(Msg4)
\ \ / /
\ \ / /
errorChennal(Msg5)
1。 Msg1(EmployeeObject),Msg2(DetailsObjet),Msg3(VerificationObject),Msg4(FinalObject),Msg5(ErrorObject)
Each channel payloads will have different Class Objects.
尝试: 1.当我尝试使用@transformer时,我无法与“erroeChannel”进行通信。
问题: 如何使用消息转换器将一个通道路由到特定通道?
找到答案
Configuration:
<int:channel id="channel1"/>
<int:channel id="channel2"/>
<int:channel id="channel3"/>
<int:channel id="channel4"/>
<int:service-activator input-channel="channel1" ref="firstChannel" method="doProcess1" />
<int:service-activator input-channel="channel2" ref="secondChannel" method="doProcess2" />
<int:service-activator input-channel="channel3" ref="thirdChannel" method="doProcess3" />
<int:service-activator input-channel="channel4" ref="forthChannel" method="doProcess4" />
<int:service-activator input-channel="errorChannel" ref="errorHandlerChannel" method="doErrorProcess" />
Java Code:
public FirstChannel {
private Map<String, MessageChannel> msgChannels;
boolean isError = false;
@Autowired
public ScheduleParser(Map<String, MessageChannel> msgChannels) {
super();
this.msgChannels = msgChannels;
}
public void doprocess1(Message<?> message){
File file = (File) message.getPayload();
//business code
if(!isError)
//transforming the messae
msgChannels.get("channel2").send(new GenericMessage(EmployeeVO , headersMap));
else
msgChannels.get("errorChannel").send(new GenericMessage(ObjectVO , headersMap));
}
}
同样的方式其他渠道代码
答案 0 :(得分:0)
频道没有相互连接,它们连接到端点。
变形金刚没有路由,路由器路由。
你需要像
这样的东西channel1->payload-type-router
type1Channel->...
type2Channel->...
...
可能为下游的每个有效负载类型使用不同的变压器。
通常更好地展示您尝试过的配置,而不是像您所展示的那样抽象。
错误流配置取决于启动流(网关,轮询器等)的内容 - 即channel1
的上游。
修改强>
您的配置完全错误。例如,您目前在channel1
上有两个订阅者 - 标头值路由器和服务激活器。
到达channel1
的消息将交替转到其中一个消息 - 前往服务激活器的消息将从不转到路由器。
在不知道完整图片的情况下,我猜你需要像...这样的东西。
channel1->serviceActivator1->channel1toRouter->router(channel2 or failed)
channel2->serviceActivator2->channel2toRouter->router(channel2 or failed)
...