非常に基本的なものである春の統合フローを通過するすべてのメッセージを監査する必要があります。Purpousesを監査するためのMessageHistoryオブジェクトのオーバーロード
アプリケーションは、int-redis:queue-inbound-channel-adapterから読み取り、int-http:outbound-gatewayに書き込みます。
出力ゲートウェイには、HTTPメソッドの応答を受け取るための返信チャネルがあります。これは、最初のメッセージとhttp応答を含む監査情報を登録したいときです。
httpメソッドが失敗した場合、メッセージはerrorHandlerに送られ、タイムスタンプとペイロードで履歴オブジェクトを取得できます。これは監査に最適です。
httpメソッドが動作する場合(Code 200,201 ...)、ステータスコード付きのResponseEntityオブジェクトを含むメッセージが表示されますが、redisの初期ペイロードはありません。
したがって、監査のための完全な情報を得るために、2つのメッセージを統合する方法はありますか(http発信とhttp応答を送信する前に)
ありがとうございます!
ここで統合の流れ:
<int:message-history/>
<int:channel id="responseChannel"/>
<int:channel id="responseError"/>
<int:logging-channel-adapter channel="responseChannel" level="INFO"
expression="@messageHandlerSpel.handle(#this)" id="logger"/>
<int:logging-channel-adapter channel="responseError"
level="ERROR" expression="@errorHandlerSpel.handle(#this)"
id="LogingERROR"/>
<int-redis:queue-inbound-channel-adapter id="inputRedis" connection-factory="redisCF"
channel="redisInput" queue="redis-input" serializer="" error-channel="responseError"/>
<int:channel id="redisInput" />
<int-http:outbound-gateway id="HttpOutbound" request-channel="redisInput"
url="http://{server}:{port}/{index}/{type}/{id}"
http-method="PUT" extract-request-payload="true" charset="UTF-8"
reply-channel="responseChannel" request-factory="requestFactory"/>
およびハンドラクラス:
@Component
public class MessageHandlerSpel {
public String handle(Message<byte[]> message) {
MessageHeaders msgH = message.getHeaders();
MessageHistory msgHistory =
message.getHeaders().get(MessageHistory.HEADER_NAME, MessageHistory.class);
... // Do whatever
return "";
}
Perfectaとクリーンなソリューション、Thanks Artem! –