我可以使用<int:correlation-id />
标记设置相关ID,但我想从POJO设置它。所以我试过
<int:header-enricher id="he" input-channel="in" output-channel="test">
<int:correlation-id ref="heSimple" method="resolve" />
</int:header-enricher>
这不起作用。 CorrelationId未修改。但是,如果我将其更改为
<int:header-enricher id="he" input-channel="in" output-channel="test">
<int:header name="foo" ref="heSimple" method="resolve" />
</int:header-enricher>
这很好用。所以基本上我可以修改除此pojo之外的任何其他标题键而不是相关id。我也试过
<int:header-enricher id="he" input-channel="in" output-channel="test">
<int:header name="correlationId" ref="heSimple" method="resolve" />
</int:header-enricher>
有趣的是,这也不起作用。
修改
private MessageChannel in;
in.send(MessageBuilder.withPayload("a1").build());
in.send(MessageBuilder.withPayload("b1").setCorrelationId("1").build());
某种程度上,该问题似乎与在发送消息时明确设置相关性ID有关。因此,在这种情况下,a1消息最终会使用标头更丰富来设置新的核心化ID,但消息b2继续使用1作为相关ID。
查看调试日志,似乎a1消息被发送到转换器并调用标头更丰富但是对于消息b2,不调用标头扩充器
[11:44:23:052] [main] DEBUG o.s.i.t.MessageTransformingHandler - org.springframework.integration.transformer.MessageTransformingHandler#0 received message: [Payload=a1][Headers={timestamp=1399045463050, id=d20d68e1-ea7a-df20-4faf-d1864855851c}]
in hesimple for [Payload=a1][Headers={timestamp=1399045463050, id=d20d68e1-ea7a-df20-4faf-d1864855851c}]
[11:44:23:055] [main] DEBUG o.s.i.t.MessageTransformingHandler - handler 'org.springframework.integration.transformer.MessageTransformingHandler#0' sending reply Message: [Payload=a1][Headers={timestamp=1399045463055, id=3b72891c-aaa5-3570-7715-e020529b5f83, correlationId=test}]
对于消息b1标题已经被跳过
[11:44:23:056] [main] DEBUG o.s.i.t.MessageTransformingHandler - org.springframework.integration.transformer.MessageTransformingHandler#0 received message: [Payload=b1][Headers={timestamp=1399045463055, id=9aa2bb7e-9c6c-66e5-0d64-3afea4a57ee4, correlationId=1}]
[11:44:23:056] [main] DEBUG o.s.i.t.MessageTransformingHandler - handler 'org.springframework.integration.transformer.MessageTransformingHandler#0' sending reply Message: [Payload=b1][Headers={timestamp=1399045463056, id=c8d54223-e506-727d-6bff-703755017403, correlationId=1}]
标题集中没有多少
public static class HESimple {
public String resolve(Message<String> message){
System.out.println("in hesimple for " + message);
return "test";
}
}
答案 0 :(得分:1)
我刚刚测试了第一个案例,它对我来说效果很好。
您使用的是什么版本的Spring Integration?
该方法的签名是什么?
关于该标题没有任何“特殊”可能导致您描述的不同行为。我建议你打开DEBUG日志来弄清楚发生了什么。
编辑:
要覆盖现有值,您需要设置overwrite="true"
。