我有一个通过SOAP与另一个遗留服务通信的spring-boot项目。
为此,我使用spring-boot-starter-web-services (2.0.8.RELEASE)。我需要为来自遗留服务的SOAP响应添加指标(状态代码为200、非200的请求数量,等等)
我的项目依赖于spring-boot-actuator,但不幸的是,我在actuator/micrometer文档中找不到如何做到这一点。
是否可以为实际用于从远程服务发送/接收数据的WebServiceTemplate启用度量(类似于actuator对RestTemplate/WebClient所做的事情),或者我需要为此添加一些自定义代码?
发布于 2020-05-04 20:43:59
找到解决方案:有截获请求/响应的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;
}https://stackoverflow.com/questions/61473558
复制相似问题