首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring集成RecipientListRouter不会创建多个有效载荷

Spring集成RecipientListRouter不会创建多个有效载荷
EN

Stack Overflow用户
提问于 2020-02-07 11:13:48
回答 1查看 69关注 0票数 2

请有人帮助我解决这个问题,我按照文档的建议配置了我的ReceipientListRouter:

代码语言:javascript
复制
@Bean
    public IntegrationFlow routerFlow() {
        return IntegrationFlows.from(CHANNEL_INPUT)
                .routeToRecipients(r -> r
                        .applySequence(true)
                        .ignoreSendFailures(true)
                        .recipient(CHANNEL_OUTPUT_1)
                        .recipient(CHANNEL_OUTPUT_2)
                        .sendTimeout(1_234L))
                .get();
    } 

@ServiceActivator(inputChannel = CHANNEL_OUTPUT_1, outputChannel = CHANNEL_END)
    public Object foo(Message<?> message) {
       message.gePayload();
      //  processing1() ...
    }

@ServiceActivator(inputChannel = CHANNEL_OUTPUT_2, outputChannel = CHANNEL_END)
    public Object bar(Message<?> message) {
       message.gePayload();
      //  processing2() ...
    }

我希望得到这个工作流:

代码语言:javascript
复制
CHANNEL_INPUT(payload-1) |----> CHANNEL_OUTPUT_1(payload-2) 
                         |----> CHANNEL_OUTPUT_2(payload-3)

其中foo激活器输入上的有效载荷-2等于有效载荷-1,而条形激活器输入的有效载荷-3等于有效载荷-1。

但实际工作流程是:

foo激活器输入的有效载荷-2等于有效载荷-1,但是bar激活器输入的有效载荷-3等于foo激活器输出的有效载荷-2消息。

代码语言:javascript
复制
it seems like this is the actual workflow
CHANNEL_INPUT(payload-1)----> CHANNEL_OUTPUT_1(payload-2)----> CHANNEL_OUTPUT_2(payload-3)

调试后,我注意到message.getHeader()并不相同(它实际上包含"sequenceNumber“和"sequenceSize"),但是对于message.getPayload,如上文所述

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-07 15:08:53

虽然消息是不可变的,但有效负载不是(除非它是一个不可变的对象,例如字符串)。

如果您在service1中更改了有效负载,则在service2中将看到该突变。

如果不希望service2看到突变,则需要在变异之前克隆/复制有效负载。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60112339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档