作为非功能性需求的一部分,我必须在Spring集成流程中记录每个http-outbound调用的响应时间。
我有一系列http:outbound-gateway&,它们进行REST API调用(JSON中的请求/响应)。我必须记录不同的事情,如请求有效负载,服务端点名称,状态(成功/失败)。
我尝试使用ChannelInterceptorAdapter,如:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.integration.Message;
import org.springframework.integration.MessageChannel;
import org.springframework.integration.channel.interceptor.ChannelInterceptorAdapter;
import org.springframework.stereotype.Component;
@Component(value = "integrationLoggingInterceptor")
public class IntegrationLoggingInterceptor extends ChannelInterceptorAdapter {
private static final Logger LOGGER = LoggerFactory.getLogger(IntegrationLoggingInterceptor.class);
@Override
public void postSend(Message<?> message, MessageChannel channel, boolean sent) {
LOGGER.debug("Post Send - Channel " + channel.getClass());
LOGGER.debug("Post Send - Headers: " + message.getHeaders() + " Payload: " + message.getPayload() + " Message sent?: " + sent);
}
@Override
public Message<?> postReceive(Message<?> message, MessageChannel channel) {
try {
LOGGER.debug("Post Receive - Channel " + channel.getClass());
LOGGER.debug("Post Receive - Headers: " + message.getHeaders() + " Payload: " + message.getPayload());
} catch(Exception ex) {
LOGGER.error("Error in post receive : ", ex);
}
return message;
}
}
但是我无法弄清楚如何获得每个http:outbound-gateway的响应时间。
任何指针/建议/提示/建议都将受到高度赞赏。
答案 0 :(得分:1)
是的,你应该写Interceptor
但不能写channel
和<int-http:outbound-gateway>
。有一项功能<request-handler-advice-chain>
它可以是AOP Advice
的任何实现。为了您的目的,MethodInterceptor
是一个不错的选择。该建议适用于AbstractReplyProducingMessageHandler.handleRequestMessage
,其中真正的“硬”是{{1}}。工作完成了。