Spring Integration Java DSL - 流程中可重用的对象

3
我是Spring Integration DSL的新手,遇到了一个问题。我需要在子流程的特定点或流程中的任何其他点上使用对象,类似于可在整个流程中重用的会话变量。以下是一个示例,在该示例中,我将UDP请求转换为HTTP请求,该请求发送到API函数,并且接收到的响应不包含制作UDP响应所需的数据。因此,我需要UDP请求中的数据来制作UDP响应。我一直在考虑分裂器,但我不认为这是一个解决方案,甚至扩展当前的集成流以满足我的需求也不行。我知道系统没有松散耦合,但必须有一种方法可以做到这一点。
@Bean
public IntegrationFlow udpHttpFlow() {
    return IntegrationFlows.from(udpInboundChannel())
            .transform(udpRequestTransformer())
            /* udp request object to use */
            .<UdpRequest, Boolean>route(SessionObject::sessionExists, mapping -> mapping
                    .subFlowMapping(false, sf -> sf
                            .transform(httpRequestTransformer())
                            .handle(httpOutboundGateway())
                            .transform(httpResponseTransformer()))
                            /*use udp object here .handle(...) */
                    .subFlowMapping(true, sf -> sf
                        /* .handle(...) */
            .transform(udpResponseTransformer())
            .handle(udpOutboundChannel())
            .get();
}
1个回答

4

问题已解决,使用了enrichHeaders方法。

@Bean
public IntegrationFlow udpHttpFlow() {
    return IntegrationFlows.from(udpInboundChannel())
            .transform(udpRequestTransformer())
            /* save udb request object to message header */
            .enrichHeaders(s -> s.headerExpressions(h -> h.put("udp", "payload")))
            .<UdpRequest, Boolean>route(SessionObject::sessionExists, mapping -> mapping
                    .subFlowMapping(false, sf -> sf
                            .transform(httpRequestTransformer())
                            .handle(httpOutboundGateway())
                            .transform(httpResponseTransformer())
                            /* an example how to use the udp request object */
                            .handle((payload, headers) -> headers.get("udp")))
                    .subFlowMapping(true, sf -> sf
                        /* .handle(...) */
            .transform(udpResponseTransformer())
            .handle(udpOutboundChannel())
            .get();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接