首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring boot web服务指标监控

Spring boot web服务指标监控
EN

Stack Overflow用户
提问于 2020-04-28 13:58:09
回答 1查看 1.2K关注 0票数 1

我有一个通过SOAP与另一个遗留服务通信的spring-boot项目。

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

我的项目依赖于spring-boot-actuator,但不幸的是,我在actuator/micrometer文档中找不到如何做到这一点。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-04 20:43:59

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

代码语言:javascript
复制
Counter.Builder responseStatusCounter = Counter
        .builder("soap.server.response")
        .baseUnit("responses");

和在EndpointInterceptorAdapter#afterCompletion中分析SOAP响应并对错误或成功响应进行计数:

代码语言:javascript
复制
@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

代码语言:javascript
复制
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;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61473558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档