【发布时间】:2015-02-09 21:08:48
【问题描述】:
我正在使用来自spring-integration 的声明检查模式,但我希望使用自定义 ID 存储消息。这应该很容易,因为消息存储实现使用传入的消息头 id 来存储消息。是否可以使用标头丰富器或/和标头过滤器覆盖消息标头 ID 的值?
消息头 id 和消息存储
SimpleMessageStore 和 JdbcMessageStore 正在使用传入消息 ID 来存储消息。在addMessage 方法中(示例来自SimpleMessageStore)我们有:
this.idToMessage.put(message.getHeaders().getId(), message);
要拥有自定义 ID,在声明签入之前拥有一个标头丰富器就足够了,其中 id 标头的值被替换为自定义值。例如:
<int:header-enricher input-channel="gateDocCheckInReqChannel"
output-channel="gateDocCheckInEnrichedChannel">
<int:header name="id" expression="payload.getDocumentID()" overwrite="true" />
</int:header-enricher>
<int:claim-check-in input-channel="gateDocCheckInEnrichedChannel"
output-channel="gateDocCheckInReplyChannel" message-store="messageStore" />
它不起作用;消息头 id 不会被覆盖。我尝试在标题丰富器之前对 ID 进行标题过滤器,但它也不起作用。
相关
我发现这篇关于删除被某些内部逻辑撤消的标题字段的旧帖子:
http://forum.spring.io/forum/spring-projects/integration/74099-remove-header-fields
此外,在撤消标头删除的消息处理程序上存在这个已关闭的问题 INT-923。
https://jira.spring.io/browse/INT-923
假设标题过滤器上的问题 INT-1135 修复了此行为。
https://jira.spring.io/browse/INT-1135
【问题讨论】:
标签: spring-integration spring spring-integration