0

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

Channel2 和 Channel3 的输出通道使用 xml xpath-transformer 并输出到 Channel 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"));
}
4

1 回答 1

0

“java.lang.IllegalStateException:不允许空关联。也许 CorrelationStrategy 失败了?” 异常意味着您correlation-strategy-expression="headers['jms_messageId']"不会产生任何有意义的东西。准确地说jms_messageId,消息中没有标题。

不知道为什么你对相关键做了这样的选择,但是当你执行 HTTP 请求时肯定不会有这样的标头。您可以效仿它,但选择其他相关策略可能会更好。

另一方面,查看您最初的任务描述,我会说您需要查看Scatter-Gather模式并完全停止担心相关键!

于 2018-08-01T17:25:19.307 回答