代码之家  ›  专栏  ›  技术社区  ›  Kris Swat

网关和聚合器-相关策略错误

  •  0
  • Kris Swat  · 技术社区  · 6 年前

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

    channel2和channel3的输出通道使用xml xpath转换器 输出到通道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"
    }
    

    请建议,如果这是一个设计问题或如何解决这个问题

    Eddi1: 下面的散点集有效吗?

    <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 回复  |  直到 6 年前
        1
  •  0
  •   Artem Bilan    6 年前

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

    不知道为什么要对相关键进行这样的选择,但是在执行http请求时肯定不会有这样的头。不过,您可以仿效它,但最好选择其他关联策略。

    另一方面,看看你最初的任务描述,我会说你需要看看 Scatter-Gather 模式和停止担心相关键一起!