网关和聚合器-CorrelationStrategy错误

时间:2018-08-01 15:43:34

标签: spring-boot spring-integration

我必须使用Spring集成访问外部服务。流程是(1)我必须传递一个ID才能使用步骤1中的基本信息来获取基本信息(2),我需要访问更多服务并将该信息合并到一个singlr对象中。 积分图: 输入:Channel1输出到:Channel1Out 我有收件人列表路由器,可将消息放入两个通道Channel2和Channel3。

Channel2和Channel3的输出通道使用xml xpath-transformer  并输出到频道4

<int:aggregator id="aggregatorChannel"      
                    correlation-strategy-expression="headers['jms_messageId']"  
                    release-strategy-expression="size() == 2" method="mergeVO"
                    input-channel="channel4" output-channel="dest-channel">
            <bean class="n.b.lbr.eai.vo.PojoAggregator"></bean>
    </int:aggregator>

这给出了错误。

java.lang.IllegalStateException: Null correlation not allowed.  Maybe the CorrelationStrategy is failing?
        at org.springframework.util.Assert.state(Assert.java:70) ~[spring-core-4.3.8.RELEASE.jar:4.3.8.RELEASE]
        at org.springframework.integration.aggregator.AbstractCorrelatingMessageHandler.handleMessageInternal(AbstractCorrelatingMessageHandler.java:385) ~[spring-integration-core-4.3.9.RELEASE.jar:4.3.9.RELEASE]

我确实看到了有关该主题的一些帖子,但是我不明白如何解决以下错误

{
    "timestamp": 1533137160301,
    "status": 500,
    "error": "Internal Server Error",
    "exception": "java.lang.IllegalStateException",
    "message": "Null correlation not allowed.  Maybe the CorrelationStrategy is failing?",
    "path": "/w/b/search/11223"
}

如果是设计问题或如何解决此问题,请提出建议

EDIT1: 下面的有效散点集是吗?

<bean id="messageStore" class="org.springframework.integration.store.SimpleMessageStore"/>
    <int:scatter-gather id="scatterGather2" input-channel="drBInputChannel" gather-channel="gatherChannel" gather-timeout="5000">
        <int:scatterer id="myScatterer" apply-sequence="true">
            <int:recipient channel="bserviceInputChannel"/>
            <int:recipient channel="aserviceInputChannel"/>
        </int:scatterer>
        <int:gatherer id="myGatherer" 
                **??**
                message-store="messageStore"
                correlation-strategy=**??**
                release-strategy-expression="size() == 2"
                >
        <bean class="nd.wbr.eai.vo.PojoAggregator"></bean>
        </int:gatherer>
    </int:scatter-gather>

我需要帮助以转换为xml并在上面使用

@Bean
public MessageHandler gatherer() {
    return new AggregatingMessageHandler(
            ***new ExpressionEvaluatingMessageGroupProcessor("^[payload gt 5] ?:-1D"),***
            new SimpleMessageStore(),
            ***new HeaderAttributeCorrelationStrategy(
                   IntegrationMessageHeaderAccessor.CORRELATION_ID),***
            new ExpressionEvaluatingReleaseStrategy("size() == 2"));
}

1 个答案:

答案 0 :(得分:0)

“ java.lang.IllegalStateException:不允许空关联。也许CorrelationStrategy失败了?”异常表示您的correlation-strategy-expression="headers['jms_messageId']"不会产生任何有意义的结果。确切地说,消息中没有jms_messageId头。

不确定为什么要对相关密钥进行这样的选择,但是执行HTTP请求时绝对不会有这样的标头。虽然您可以模仿它,但是最好选择其他一些关联策略。

另一方面,请看一下您原来的任务说明,您需要研究Scatter-Gather模式,而不必再担心关联键了!