我必须使用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"));
}
答案 0 :(得分:0)
“ java.lang.IllegalStateException:不允许空关联。也许CorrelationStrategy失败了?”异常表示您的correlation-strategy-expression="headers['jms_messageId']"
不会产生任何有意义的结果。确切地说,消息中没有jms_messageId
头。
不确定为什么要对相关密钥进行这样的选择,但是执行HTTP请求时绝对不会有这样的标头。虽然您可以模仿它,但是最好选择其他一些关联策略。
另一方面,请看一下您原来的任务说明,您需要研究Scatter-Gather模式,而不必再担心关联键了!