簡體   English   中英

使用索賠檢查模式保留有效負載中的一些信息?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM