Java Spring boot web服务度量监控

Java Spring boot web服务度量监控,java,spring-boot,soap,metrics,Java,Spring Boot,Soap,Metrics,我有一个springboot项目,它通过SOAP与另一个遗留服务通信 为此,我使用SpringBootStarterWeb服务(2.0.8.RELEASE)。我需要为来自遗留服务的SOAP响应添加度量(状态代码为200、非200等的请求数) 我的项目依赖于spring boot致动器,但不幸的是,我在致动器/千分尺文档中找不到如何做到这一点 是否可以为实际用于从远程服务发送/接收数据的WebServiceTemplate启用度量(类似于actuator为RestTemplate/WebClien

我有一个springboot项目,它通过SOAP与另一个遗留服务通信

为此,我使用SpringBootStarterWeb服务(2.0.8.RELEASE)。我需要为来自遗留服务的SOAP响应添加度量(状态代码为200、非200等的请求数)

我的项目依赖于spring boot致动器,但不幸的是,我在致动器/千分尺文档中找不到如何做到这一点

是否可以为实际用于从远程服务发送/接收数据的WebServiceTemplate启用度量(类似于actuator为RestTemplate/WebClient所做的操作),或者我需要为此添加一些自定义代码?

找到了解决方案: 有拦截请求/响应的
org.springframework.ws.server.endpoint.interceptor.EndpointInterceptorAdapter
,因此通过扩展EndpointInterceptorAdapter(或实现EndpointInterceptor),可以添加额外的逻辑。 我创建了一个计数器:

Counter.Builder responseStatusCounter = Counter
        .builder("soap.server.response")
        .baseUnit("responses");
EndpointInterceptorAdapter#afterCompletion
中,分析SOAP响应并计算错误或成功响应:

@Override
public void afterCompletion(final MessageContext messageContext,
                            final Object endpoint, final Exception ex) throws Exception {
    WebServiceMessage message = messageContext.getResponse();
    SaajSoapMessage saajSoapMessage = (SaajSoapMessage) message;
    SOAPMessage soapMessage = saajSoapMessage.getSaajMessage();

    SOAPPart soapPart = soapMessage.getSOAPPart();
    SOAPEnvelope soapEnvelope = soapPart.getEnvelope();
    SOAPBody soapBody = soapEnvelope.getBody();
    SOAPFault soapFault = soapBody.getFault();

    responseStatusCounter
        .description(getDescription(soapFault))
        .tags("code", soapFault != null && StringUtils.isNotEmpty(soapFault.getFaultString()) ? "error" : "ok")
        .register(meterRegistry)
        .increment();
}
对于在应用程序中发送SOAP请求的web客户端,我使用
javax.xml.ws.handler.SOAP.SOAPHandler

public boolean handleMessage(final SOAPMessageContext context) {
    log.info("Computing response status count");
    SOAPMessage message = context.getMessage();
    SOAPBody body = message.getSOAPBody();
    SOAPFault fault = body.getFault();
    responseStatusCounter
        .tags("code", fault != null ? "error" : "ok")
        .register(meterRegistry)
        .increment();
    return true;
}

如果我正确理解了您的问题,那么我认为您要问的是HTTP跟踪,它已经存在于执行器中。或者您可以编写一个自定义的,因为我记得,HTTP跟踪只显示最后100个HTTP请求/响应。你可以考虑创建你自己的代码> HtpExchange Trace[/Cord]实现。我需要类似于执行器/Mealths/HTTPclicli.ReavestsDo的东西。你知道我们如何得到时间(持续时间)吗?什么是getDescription和meterRegistry?@PauloPedroso在方法getDescription中,我只是提取了一些包含错误文本的xml字段。计量学是一门学问。我在创建中间接受器时将其传递给构造函数