当前位置: 首页 > 知识库问答 >
问题:

Spring boot web服务度量监视

洪博艺
2023-03-14

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

我的项目依赖于spring-boot-actuator,但不幸的是,我在actuator/千分尺文档中没有发现如何做到这一点。

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

共有1个答案

楮景明
2023-03-14

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

Counter.Builder responseStatusCounter = Counter
        .builder("soap.server.response")
        .baseUnit("responses");

EndpointInterceptorAdapter#AfterCompletity中,分析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;
}
 类似资料:
  • 我有一个服务,说: 我想使用foo来控制以HTML呈现的列表: 以便控制器检测何时维修。foo更新了,我拼凑了这个模式,将服务添加到控制器的

  • 微服务治理的一个核心需求便是服务可观察性。作为微服务的牧羊人,要做到时刻掌握各项服务的健康状态,并非易事。云原生时代这一领域内涌现出了诸多解决方案。本组件对可观察性当中的重要支柱遥测与监控进行了抽象,方便使用者与既有基础设施快速结合,同时避免供应商锁定。 安装 通过 Composer 安装组件 composer require hyperf/metric hyperf/metric 组件默认安装

  • 1.1、什么是监控服务 监控服务(Monitor Service),是指对直播视频流的实时监控。目睹云提供的监控服务能够支持对rtmp、flv、hls等大多数直播流进行即时监控,并且渲染成图表。监控服务主要监控的是直播视频的帧率和码率信息,这样能够及时的反映出来视频流的卡顿流畅情况。 1.2、监控服务功能介绍 支持多种流监控:支持rtmp、flv、hls等多种直播视频协议流监控 历史监控数据:支持

  • 服务调用监控 KernalEvent::SERVICE_CALL事件 在框架层,调用servcie时,会抛出KernalEvent::SERVICE_CALL事件,你可以监听该事件,做数据上报处理,请以异步方式上报 <?php namespace src\Web\Listeners; use Listener; use Event; class Servic

  • 2.4 多服务&多监听 2.4.1 在Go代码中声明 假定用户需要创建的Web服务 服务名称 版本号 监听地址 网络类型 读取请求数据超时 写入响应数据超时 myapp1 1.0 0.0.0.0:8080、0.0.0.0:4430 http、https(TLS) 0 0 myapp2 2.0 0.0.0.0:8081、0.0.0.0:4431 http、https(TLS) 0 0 无版本号的服务

  • 假定用户需要创建的Web服务 服务名称 版本号 监听地址 网络类型 读取请求数据超时 写入响应数据超时 myapp1 1.0 0.0.0.0:8080 http 0 0 myapp2 2.0 0.0.0.0:8081 http 0 0 无版本号的服务 func main() { ... app1 := faygo.New("myapp1") app2 := faygo.New("mya