[英]Retain some information in payload with claim check pattern?
我正在閱讀Spring Integration中的Claim Check模式。
使用此模式時,聽起來好像整個有效負載都放在消息存儲庫中,結果有效負載只是聲明檢查ID。
Spring是否提供了一種簡單的方法來將有效負載存儲在消息存儲庫中,同時保留有效負載的特定部分? 您是否需要首先使用標頭擴充器並將要訪問的屬性存儲在標頭中?
例如,假設我的有效負載是一個簡單的XML文檔:
<payload>
<cc>1234432156788765</cc>
<or>5799</or>
</payload>
我想要聲明檢查此有效負載,但仍保留對payload.or
元素的訪問權限。 如何使用當前的Spring Integration組件完成此操作?
Claim Check
的主要目的是存儲消息,而不必擔心消息的大小,因為消息可能會通過多個外部系統傳輸。 它也可以在系統故障后恢復。
現實世界中最好的例子是飛行行李。 在轉賬期間,您手頭只有收據,並在最后收到行李。
為了實現您的目標,我建議您使用<enricher>
:
<int:enricher request-channel="claimCheckInChannel">
<int:header name="claimCheck" expression="payload"/>
</int:enricher>
<claim-check-in input-channel="claimCheckInChannel" message-store="messageStore"/>
這樣您就不會丟失原始payload
並在標頭中包含Claim Check id
。
注意:Claim Check將整個message
與標題一起存儲,而不僅僅是payload
。 相關代碼來自org.springframework.integration.transformer.ClaimCheckInTransformer
:
@Override
protected Object doTransform(Message<?> message) throws Exception {
Assert.notNull(message, "message must not be null");
Object payload = message.getPayload();
Assert.notNull(payload, "payload must not be null");
Message<?> storedMessage = this.messageStore.addMessage(message);
MessageBuilder<?> responseBuilder = MessageBuilder.withPayload(storedMessage.getHeaders().getId());
// headers on the 'current' message take precedence
responseBuilder.copyHeaders(message.getHeaders());
return responseBuilder.build();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.