Spring integration IntegrationFlowDefinition.aggregate不';t工作:也许相关策略失败了?
错误消息:由以下原因引起:java.lang.IllegalStateException:不允许空相关。也许相关策略失败了 我的实施,Spring integration IntegrationFlowDefinition.aggregate不';t工作:也许相关策略失败了?,spring-integration,spring-integration-dsl,Spring Integration,Spring Integration Dsl,错误消息:由以下原因引起:java.lang.IllegalStateException:不允许空相关。也许相关策略失败了 我的实施, @Bean public IntegrationFlow start() { return IntegrationFlows .from("getOrders") .split() .publishSubscribeChannel(c
@Bean
public IntegrationFlow start() {
return IntegrationFlows
.from("getOrders")
.split()
.publishSubscribeChannel(c -> c.subscribe(s -> s.channel(q -> q.queue(1))
.<Order, Message<?>>transform(p -> MessageBuilder.withPayload(new Item(p.getItems())).setHeader(ORDERID, p.getOrderId()).build())
.split(Item.class, Item::getItems)
.transform() // let's assume, an object created for each item, let's say ItemProperty to the object.
// Transform returns message; MessageBuilder.withPayload(createItemProperty(getItemName, getItemId)).build();
.aggregate() // so, here aggregate method needs to aggregate ItemProperties.
.handle() // handler gets List<ItemProperty> as an input.
))
.get();
}
@Bean
公共集成流开始(){
返回积分流
.来自(“获取订单”)
.split()
.publishSubscribeChannel(c->c.subscribe(s->s.channel)(q->q.queue(1))
您缺少一个事实,transformer
是一种按原样处理整个消息的端点。如果您自己创建消息,它不会修改它。
因此,使用MessageBuilder.withPayload(createItemProperty(getItemName,getItemId)).build();
在拆分器之后,您只是错过了重要的序列详细信息标题。因此,拆分器之后的聚合器不知道如何处理您的消息,因为您将其配置为默认的关联策略,但在消息中不提供相应的标题
从技术上讲,我看不出手动创建消息的理由:简单的返回createItemProperty(getItemName,getItemId);
应该足够了。框架将代表您创建消息,并复制相应的请求消息头
如果您仍然认为您需要在该转换中创建消息,那么您需要在该代码> MessageBuilder > /代码>上从请求消息中考虑<代码> > /代码>,以携带所需的序列细节标题。