Spring integration Spring Integration DSL向两个通道发送相同的消息
我们需要在两个不同的通道中处理相同的消息(有效负载)。我们的印象是,使用PubliSHSubscribe频道将通过向两个频道复制消息来帮助我们解决这一问题。然而,我们认为每个通道都是一个接一个地执行的,如果e对一个通道中的有效负载进行任何更改,它也会影响另一个通道的有效负载Spring integration Spring Integration DSL向两个通道发送相同的消息,spring-integration,eai,spring-integration-dsl,Spring Integration,Eai,Spring Integration Dsl,我们需要在两个不同的通道中处理相同的消息(有效负载)。我们的印象是,使用PubliSHSubscribe频道将通过向两个频道复制消息来帮助我们解决这一问题。然而,我们认为每个通道都是一个接一个地执行的,如果e对一个通道中的有效负载进行任何更改,它也会影响另一个通道的有效负载 @Bean public IntegrationFlow bean1() { return IntegrationFlows .from("Channel1") .ha
@Bean
public IntegrationFlow bean1() {
return IntegrationFlows
.from("Channel1")
.handle(MyMessage.class, (payload, header) -> obj1.method1(payload))
.channel(MessageChannels.publishSubscribe("subscribableChannel").get())
.get();
}
@Bean
public IntegrationFlow bean21() {
return IntegrationFlows
.from("subscribableChannel")
.handle(MyMessage.class, (payload, header) -> obj2.method2(payload,header))
.channel("nullChannel")
.get();
}
@Bean
public IntegrationFlow bean22() {
return IntegrationFlows
.from("subscribableChannel")
.handle(MyMessage.class, (payload, header) -> obj3.method3(payload))
.channel("nullChannel")
.get();
}
在上面的示例中,如果我对bean21中的有效负载进行更改,则会影响传递给Bean22的输入有效负载
我的要求是将相同的有效负载传递给bean21和bean22,并并行执行它们?你能告诉我怎么做吗?没错。Spring集成只是Java,在不同的消息之间复制
有效负载
没有任何魔力。它实际上只是记忆中的同一个对象。现在假设您有一个纯Java,并且希望使用相同的Foo
对象调用两个不同的方法。然后用一种方法修改该对象。另一个发生了什么?对,它将在对象上看到一个修改
要实现将对象复制到新实例的目标,您必须自己确保。例如,在类上实现Cloneable
接口,或者提供复制构造函数或任何其他可能的解决方案来创建新对象
在其中一个订阅服务器的流程开始时,您应该执行克隆操作,这样您将拥有一个新对象,而不会影响另一个订阅服务器
请参阅本JIRA中的更多信息: