http适配器(或任何端点)的Spring集成+日志响应时间

时间:2014-05-29 16:36:37

标签: spring-integration

作为非功能性需求的一部分,我必须在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的响应时间。

任何指针/建议/提示/建议都将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

是的,你应该写Interceptor但不能写channel<int-http:outbound-gateway>。有一项功能<request-handler-advice-chain>

它可以是AOP Advice的任何实现。为了您的目的,MethodInterceptor是一个不错的选择。该建议适用于AbstractReplyProducingMessageHandler.handleRequestMessage,其中真正的“硬”是{{1}}。工作完成了。