什么消息被发送到文件出站网关的回复通道?
What message is sent to the reply channel of a File Outbound Gateway?
我正在从事一个项目,其中 Spring Integration 用作代理,将 HTTP 请求分发到相关服务并将答案发送回客户端。
传入的 HTTP 请求首先被预处理并发送到 HTTP 出站网关。
在返回客户端的途中,HTTP 响应首先使用 文件出站网关 :
写入文件
<!-- write the message payload to ./toto/ and forward it to the http channel -->
<int-file:outbound-gateway request-channel="outputFileChannel"
reply-channel="outputHttpChannel"
directory="./toto/"
filename-generator-expression="headers.file_name + '.json'"
mode="REPLACE"/>
<!-- process the message before returning it to the inbound reply channel -->
<int:chain input-channel="routingOutputHttpChannel"
output-channel="inboundReplyChannel">
...
</int:chain>
file outbound gateway 的文档说“在写入文件后,它还会将其作为消息的有效负载发送到回复通道”。
我的理解是文件 contents 是作为消息有效载荷发送的,但根据我的实现,它是作为有效载荷发送的写入文件的名称。
此时文件名与我无关。有没有办法直接发送文件内容?
如果没有,我应该怎么做才能读取写入的文件的内容?插入文件入站通道适配器(似乎有点多余)?
此外,处理未写入文件的正确方法是什么(以便伪造特定的 HTTP 响应)?我的猜测是捕捉 MessageDeliveryException...
FileWritingMessageHandler
将写入的 java.io.File
对象发送回输出通道。这不是该网关负责返回文件内容的责任。通过有效负载中的 File
,您可以使用 FileToByteArrayTransformer
或 FileToStringTransformer
作为流中的下一个端点来获取该文件的内容。 XML 配置分别参见 <int-file:file-to-string-transformer>
或 <int-file:file-to-bytes-transformer>
。
要捕获 <int-file:outbound-gateway>
中的异常并处理失败,您可以使用 <request-handler-advice-chain>
sub-element 并提供 ExpressionEvaluatingRequestHandlerAdvice
:https://docs.spring.io/spring-integration/docs/current/reference/html/messaging-endpoints.html#message-handler-advice-chain
我正在从事一个项目,其中 Spring Integration 用作代理,将 HTTP 请求分发到相关服务并将答案发送回客户端。 传入的 HTTP 请求首先被预处理并发送到 HTTP 出站网关。 在返回客户端的途中,HTTP 响应首先使用 文件出站网关 :
写入文件<!-- write the message payload to ./toto/ and forward it to the http channel -->
<int-file:outbound-gateway request-channel="outputFileChannel"
reply-channel="outputHttpChannel"
directory="./toto/"
filename-generator-expression="headers.file_name + '.json'"
mode="REPLACE"/>
<!-- process the message before returning it to the inbound reply channel -->
<int:chain input-channel="routingOutputHttpChannel"
output-channel="inboundReplyChannel">
...
</int:chain>
file outbound gateway 的文档说“在写入文件后,它还会将其作为消息的有效负载发送到回复通道”。 我的理解是文件 contents 是作为消息有效载荷发送的,但根据我的实现,它是作为有效载荷发送的写入文件的名称。 此时文件名与我无关。有没有办法直接发送文件内容? 如果没有,我应该怎么做才能读取写入的文件的内容?插入文件入站通道适配器(似乎有点多余)?
此外,处理未写入文件的正确方法是什么(以便伪造特定的 HTTP 响应)?我的猜测是捕捉 MessageDeliveryException...
FileWritingMessageHandler
将写入的 java.io.File
对象发送回输出通道。这不是该网关负责返回文件内容的责任。通过有效负载中的 File
,您可以使用 FileToByteArrayTransformer
或 FileToStringTransformer
作为流中的下一个端点来获取该文件的内容。 XML 配置分别参见 <int-file:file-to-string-transformer>
或 <int-file:file-to-bytes-transformer>
。
要捕获 <int-file:outbound-gateway>
中的异常并处理失败,您可以使用 <request-handler-advice-chain>
sub-element 并提供 ExpressionEvaluatingRequestHandlerAdvice
:https://docs.spring.io/spring-integration/docs/current/reference/html/messaging-endpoints.html#message-handler-advice-chain