Spring Boot网络服务指标监控

问题描述 投票:0回答:1

我有一个spring-boot项目,通过SOAP与另一个传统服务进行通信。

我使用spring-boot-starter-web-services (2.0.8.RELEASE)来实现。我需要为来自遗留服务的SOAP响应添加指标(状态码为200的请求数,非200的请求数等)。

我的项目对spring-boot-actuator有依赖性,但不幸的是,我在actuatormicrometer文档中没有找到如何做到这一点。

是否可以为WebServiceTemplate启用指标,它实际上是用来从远程服务发送-接收数据的(类似于actuator为RestTemplateWebClient做的事情),或者我需要为此添加一些自定义代码?

java spring-boot soap metrics
1个回答
0
投票

找到解决方案:有 org.springframework.ws.server.endpoint.interceptor.EndpointInterceptorAdapter 拦截requestresponses,所以通过扩展EndpointInterceptorAdapter(或实现EndpointInterceptor),可以添加额外的逻辑,我创建了counter。

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请求的网络客户端,我使用了 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;
}
© www.soinside.com 2019 - 2024. All rights reserved.