首页 > 解决方案 > 用于在流程中存储和检索的弹簧集成 dsl 流程变量

问题描述

我正在寻找一些流变量,我需要在其中存储像 orderId、customerId 和在流中收到的其他响应这样的值,以便我可以在流的后期使用它们来编写业务逻辑。

    .handle(outboundGateway("localhost:8080/order?orderId={orderId}")
                            .uriVariable("orderId", m -> m.getPayload())
                            .httpMethod(HttpMethod.GET)
                            .expectedResponseType(Order.class)

    .handle(outboundGateway("localhost:8080/orderDetails?orderId={orderId}")
                            .uriVariable("orderId", m -> m.getPayload())
                            .httpMethod(HttpMethod.GET)
                            .expectedResponseType(OrderDetails.class)

    .handle(outboundGateway("localhost:8080/customer?customerId={customerId}")
                            .uriVariable("customerId", m -> ((OrderDetails)m.getPayload()).getCustomerId())
                            .httpMethod(HttpMethod.GET)
                            .expectedResponseType(Customer.class)

    .handle(outboundGateway("localhost:8080/customerAddress?addressId={addressId}")
                            .uriVariable("addressId", m -> ((Customer)m.getPayload()).getAdderssId)
                            .httpMethod(HttpMethod.GET)
                            .expectedResponseType(CustomerAddress.class)
    .handle((p, h) -> somebusinesslogic)

标签: spring-integrationspring-integration-dsl

解决方案


state在流程中没有这样的抽象。好吧,本质上,运行时根本没有流量。这IntegrationFlow只是一个逻辑容器。更全面地看待 Spring Integration 解决方案会更好stateless(除非我们谈论一个aggregator)。

尽管如此,还是有一个解决方案适合您,例如将任何额外的必需信息连同其标题中的消息一起传输。通过这种方式,您在使用.enrichHeaders()之前.handle()并根据 的传播性质ServiceActivator,请求标头将复制到回复消息,因此,它们在下一个流程步骤中可用。


推荐阅读