Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring integration Spring Integration DSL向两个通道发送相同的消息_Spring Integration_Eai_Spring Integration Dsl - Fatal编程技术网

Spring integration Spring Integration DSL向两个通道发送相同的消息

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

我们需要在两个不同的通道中处理相同的消息(有效负载)。我们的印象是,使用PubliSHSubscribe频道将通过向两个频道复制消息来帮助我们解决这一问题。然而,我们认为每个通道都是一个接一个地执行的,如果e对一个通道中的有效负载进行任何更改,它也会影响另一个通道的有效负载

@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中的更多信息: