@Override public void doFilter(FilterChain chain) throws TException { final SoaHeader soaHeader = (SoaHeader) chain.getAttribute(StubFilterChain.ATTR_KEY_HEADER); final Object request = chain.getAttribute(StubFilterChain.ATTR_KEY_REQUEST); final long startTime = System.currentTimeMillis(); final InvocationContext context = (InvocationContext) chain.getAttribute(StubFilterChain.ATTR_KEY_CONTEXT); LOGGER.info("{} {} {} request", soaHeader.getServiceName(), soaHeader.getVersionName(), soaHeader.getMethodName()); try { chain.doFilter(); } finally { // Object response = chain.getAttribute(StubFilterChain.ATTR_KEY_RESPONSE); final long endTime = System.currentTimeMillis(); LOGGER.info("{} {} {} callee: {}:{} response respCode:{} time:{}ms", soaHeader.getServiceName(), soaHeader.getVersionName(), soaHeader.getMethodName(), context.getCalleeIp(), context.getCalleePort(), soaHeader.getRespCode(), endTime-startTime); } }
SoaHeader soaHeader = context.getHeader() == null ? new SoaHeader() : context.getHeader(); soaHeader.setCallerFrom(headerProxy.callerFrom()); soaHeader.setCustomerId(headerProxy.customerId()); soaHeader.setCustomerName(headerProxy.customerName()); soaHeader.setOperatorId(headerProxy.operatorId()); soaHeader.setOperatorName(headerProxy.operatorName()); soaHeader.setSessionId(headerProxy.sessionId()); SoaHeader oriHeader = transactionContext.getHeader(); soaHeader.setCustomerId(oriHeader.getCustomerId()); soaHeader.setCustomerName(oriHeader.getCustomerName()); soaHeader.setOperatorId(oriHeader.getOperatorId()); soaHeader.setOperatorName(oriHeader.getOperatorName()); soaHeader.setSessionId(oriHeader.getSessionId()); soaHeader.setCallerIp(Optional.of(SoaSystemEnvProperties.SOA_CALLER_IP)); soaHeader.setServiceName(serviceName); soaHeader.setMethodName(methodName); soaHeader.setVersionName(versionName); if (!soaHeader.getCallerFrom().isPresent()) soaHeader.setCallerFrom(Optional.of(SoaSystemEnvProperties.SOA_SERVICE_CALLERFROM)); if (!soaHeader.getSessionId().isPresent()) { soaHeader.setSessionId(Optional.of(UUID.randomUUID().toString()));
private static String generateKey(SoaHeader soaHeader) { return soaHeader.getServiceName() + ":" + soaHeader.getMethodName() + ":" + soaHeader.getVersionName(); }
public static SoaHeader constructHeader(JsonObject jsonObject) { String serviceName = jsonObject.get(SERVICENAME).getAsString(); String versionName = jsonObject.get(VERSION).getAsString(); String methodName = jsonObject.get(METHODNAME).getAsString(); SoaHeader header = SoaHeaderHelper.getSoaHeader(true); header.setServiceName(serviceName); header.setVersionName(versionName); header.setMethodName(methodName); header.setCallerFrom(Optional.of("dapeng-command")); header.setOperatorId(Optional.of(1)); header.setOperatorName(Optional.of("快塑网")); return header; }
public Task(TransactionContext context) { this.startTime = System.currentTimeMillis(); this.seqid = context.getSeqid(); SoaHeader soaHeader = context.getHeader(); this.serviceName = soaHeader.getServiceName(); this.versionName = soaHeader.getVersionName(); this.methodName = soaHeader.getMethodName(); this.callerFrom = soaHeader.getCallerFrom().isPresent() ? soaHeader.getCallerFrom().get() : null; this.callerIp = soaHeader.getCallerIp().isPresent() ? soaHeader.getCallerIp().get() : null; this.operatorId = soaHeader.getOperatorId().isPresent() ? soaHeader.getOperatorId().get() : null; this.operatorName = soaHeader.getOperatorName().isPresent() ? soaHeader.getOperatorName().get() : null; this.customerId = soaHeader.getCustomerId().isPresent() ? soaHeader.getCustomerId().get() : null; this.customerName = soaHeader.getCustomerName().isPresent() ? soaHeader.getCustomerName().get() : null; this.currentThread = Thread.currentThread(); }
if (null != bean.getServiceName()) { oprot.writeFieldBegin(new TField("serviceName", TType.STRING, (short) 1)); oprot.writeString(bean.getServiceName()); oprot.writeFieldEnd(); if (null != bean.getMethodName()) { oprot.writeFieldBegin(new TField("methodName", TType.STRING, (short) 2)); oprot.writeString(bean.getMethodName()); oprot.writeFieldEnd(); if (null != bean.getVersionName()) { oprot.writeFieldBegin(new TField("versionName", TType.STRING, (short) 3)); oprot.writeString(bean.getVersionName()); oprot.writeFieldEnd(); if (bean.getCallerFrom().isPresent()) { oprot.writeFieldBegin(new TField("callerFrom", TType.STRING, (short) 4)); oprot.writeString(bean.getCallerFrom().get()); oprot.writeFieldEnd(); if (bean.getCallerIp().isPresent()) { oprot.writeFieldBegin(new TField("callerIP", TType.STRING, (short) 5)); oprot.writeString(bean.getCallerIp().get()); oprot.writeFieldEnd(); if (bean.getRespCode().isPresent()) { oprot.writeFieldBegin(new TField("respCode", TType.STRING, (short) 11)); oprot.writeString(bean.getRespCode().get()); oprot.writeFieldEnd();
case 1: if (schemeField.type == TType.STRING) { bean.setServiceName(iprot.readString()); } else { TProtocolUtil.skip(iprot, schemeField.type); case 2: if (schemeField.type == TType.STRING) { bean.setMethodName(iprot.readString()); } else { TProtocolUtil.skip(iprot, schemeField.type); case 3: if (schemeField.type == TType.STRING) { bean.setVersionName(iprot.readString()); } else { TProtocolUtil.skip(iprot, schemeField.type); case 4: if (schemeField.type == TType.STRING) { bean.setCallerFrom(Optional.of(iprot.readString())); } else { TProtocolUtil.skip(iprot, schemeField.type); case 5: if (schemeField.type == TType.STRING) { bean.setCallerIp(Optional.of(iprot.readString())); } else { TProtocolUtil.skip(iprot, schemeField.type);
private void writeErrorMessage(ChannelHandlerContext ctx, ByteBuf outputBuf, TransactionContext context, SoaHeader soaHeader, TSoaTransport outputSoaTransport, TSoaServiceProtocol outputProtocol, SoaException e) { if (outputProtocol != null) { try { if (outputBuf.writerIndex() > 0) outputBuf.writerIndex(Integer.BYTES); soaHeader.setRespCode(Optional.ofNullable(e.getCode())); soaHeader.setRespMessage(Optional.ofNullable(e.getMsg())); outputProtocol.writeMessageBegin(new TMessage(soaHeader.getServiceName() + ":" + soaHeader.getMethodName(), TMessageType.REPLY, context.getSeqid())); outputProtocol.writeMessageEnd(); outputSoaTransport.flush(); ctx.writeAndFlush(outputBuf); LOGGER.info("{} {} {} response header:{} body:{null}", soaHeader.getServiceName(), soaHeader.getVersionName(), soaHeader.getMethodName(), soaHeader.toString()); } catch (Throwable e1) { LOGGER.error(e1.getMessage(), e1); } } } }
String methodName = soaHeaderOrigin.getMethodName(); final String logId = soaHeaderOrigin.getServiceName() + "/" + soaHeaderOrigin.getMethodName(); if (!soaHeader.getSessionId().isPresent()) { soaHeader.setSessionId(Optional.of(UUID.randomUUID().toString())); LogUtil.logInfo(SoaCommonBaseProcessor.class,soaHeader,"{} {} {} operatorId:{} operatorName:{} request body:{}", soaHeader.getServiceName(), soaHeader.getVersionName(), soaHeader.getMethodName(), soaHeader.getOperatorId(), soaHeader.getOperatorName(), formatToString(soaProcessFunction.getReqSerializer().toString(args))); LogUtil.logDebug(SoaCommonBaseProcessor.class,soaHeader,"{} {} {} {} request header:{} body:{}", soaHeader.getServiceName(), soaHeader.getVersionName(), soaHeader.getMethodName(),soaHeader.getOperatorId(),soaHeader.getOperatorName(), formatToString(soaProcessFunction.getReqSerializer().toString(args))); result = soaProcessFunction.getResult(iface, args); LogUtil.logInfo(SoaCommonBaseProcessor.class,soaHeader,"{} {} {} operatorId:{} operatorName:{} response body:{}", soaHeader.getServiceName(), soaHeader.getVersionName(), soaHeader.getMethodName(), soaHeader.getOperatorId(), soaHeader.getOperatorName(), formatToString(soaProcessFunction.getResSerializer().toString(result))); LogUtil.logDebug(SoaCommonBaseProcessor.class,soaHeader,"{} {} {} {} response header:{} body:{}", soaHeader.getServiceName(), soaHeader.getVersionName(), soaHeader.getMethodName(),soaHeader.getOperatorId(),soaHeader.getOperatorName(), formatToString(soaProcessFunction.getResSerializer().toString(result))); } finally { chain.setAttribute(ContainerFilterChain.ATTR_KEY_I_PROCESSTIME, System.currentTimeMillis() - startTime); soaHeader.setAttachment("dapeng_args", args.toString()); soaHeader.setAttachment("dapeng_result", result == null ? "null" : result.toString()); context.getHeader().setRespCode(Optional.of("0000")); context.getHeader().setRespMessage(Optional.of("成功")); out.writeMessageBegin(new TMessage(context.getHeader().getMethodName(), TMessageType.CALL, context.getSeqid())); soaProcessFunction.getResSerializer().write(result, out); out.writeMessageEnd();
/** * 根据matcher.Id,返回上下文中对应的值 * * @param ctx * @param matcher * @return */ public static Object checkFieldMatcher(InvocationContext ctx, Matcher matcher) { Id id = matcher.getId(); if ("operatorId".equals(id.getName())) { return ctx.getHeader().getOperatorId().orElse(null); } else if ("callerFrom".equals(id.getName())) { return ctx.getHeader().getCallerFrom().orElse(null); } else if ("ip".equals(id.getName())) { return ctx.getHeader().getCallerIp().orElse(null); } else if ("customerId".equals(id.getName())) { return ctx.getHeader().getCustomerId().orElse(null); } else if ("service".equals(id.getName())) { return ctx.getHeader().getServiceName(); } else if ("method".equals(id.getName())) { return ctx.getHeader().getMethodName(); } else if ("version".equals(id.getName())) { return ctx.getHeader().getVersionName(); } else { throw new AssertionError("not support Field: " + id.getName()); } }
@Override public void doFilter(FilterChain chain) throws TException { final SoaHeader soaHeader = (SoaHeader) chain.getAttribute(StubFilterChain.ATTR_KEY_HEADER); final Object request = chain.getAttribute(StubFilterChain.ATTR_KEY_REQUEST); LOGGER.info("{} {} {} request header:{} body:{}", soaHeader.getServiceName(), soaHeader.getVersionName(), soaHeader.getMethodName(), soaHeader.toString(), request.toString()); try { chain.doFilter(); } finally { Object response = chain.getAttribute(StubFilterChain.ATTR_KEY_RESPONSE); if (response != null) LOGGER.info("{} {} {} response header:{} body:{}", soaHeader.getServiceName(), soaHeader.getVersionName(), soaHeader.getMethodName(), soaHeader.toString(), formatToString(response.toString())); } }
SoaHeader header = new SoaHeader(); header.setServiceName(serviceName); header.setVersionName(versionName); header.setMethodName(methodName); header.setCallerFrom(Optional.of("TestController"));
serviceInfos = new ServiceInfos(false, usableList); } else { serviceInfos = RegistryAgentProxy.getCurrentInstance(RegistryAgentProxy.Type.Client).loadMatchedServices(soaHeader.getServiceName(), soaHeader.getVersionName(), true); usableList = serviceInfos.getServiceInfoList(); String serviceKey = soaHeader.getServiceName() + "." + soaHeader.getVersionName() + "." + soaHeader.getMethodName() + ".consumer"; LoadBalanceStratage balance = getLoadBalanceStratage(serviceInfos.isUsingFallbackZk(), serviceKey) == null ? LoadBalanceStratage.LeastActive : getLoadBalanceStratage(serviceInfos.isUsingFallbackZk(), serviceKey); LOGGER.info("{} {} {} target:{}", soaHeader.getServiceName(), soaHeader.getVersionName(), soaHeader.getMethodName(), callerInfo); context.getHeader().setVersionName(infos[2]); } else if (isLocal) { context.setCalleeIp(SoaSystemEnvProperties.SOA_SERVICE_IP);
invocationContext.getHeader().setTransactionId(Optional.of(transactionContext.getCurrentTransactionId())); invocationContext.getHeader().setTransactionSequence(Optional.of(transactionContext.getCurrentTransactionSequence())); transactionProcess.setExpectedStatus(TGlobalTransactionProcessExpectedStatus.Success); transactionProcess.setServiceName(invocationContext.getHeader().getServiceName()); transactionProcess.setMethodName(invocationContext.getHeader().getMethodName()); transactionProcess.setVersionName(invocationContext.getHeader().getVersionName()); transactionProcess.setRollbackMethodName(invocationContext.getHeader().getMethodName() + "_rollback");
SoaHeader header = new SoaHeader(); header.setServiceName(process.getServiceName()); header.setVersionName(process.getVersionName()); header.setMethodName(rollbackOrForward ? process.getRollbackMethodName() : process.getMethodName()); header.setCallerFrom(Optional.of("GlobalTransactionManager")); header.setTransactionId(Optional.of(process.getTransactionId())); header.setTransactionSequence(Optional.of(process.getTransactionSequence()));
String methodName = soaHeaderOrigin.getMethodName(); final String logId = soaHeaderOrigin.getServiceName() + "/" + soaHeaderOrigin.getMethodName(); if(!soaHeader.getSessionId().isPresent()){ soaHeader.setSessionId(Optional.of(UUID.randomUUID().toString())); LOGGER.info("{} {} {} {} request header:{} body:{}", soaHeader.getServiceName(), soaHeader.getVersionName(), soaHeader.getMethodName(), context.getSeqid(), soaHeader.toString(), formatToString(soaProcessFunction.getReqSerializer().toString(args))); long startTime = System.currentTimeMillis(); try { result = soaProcessFunction.getResult(iface, args); LOGGER.info("{} {} {} {} response header:{} body:{}", soaHeader.getServiceName(), soaHeader.getVersionName(), soaHeader.getMethodName(), context.getSeqid(), soaHeader.toString(), formatToString(soaProcessFunction.getResSerializer().toString(result))); } finally { chain.setAttribute(ContainerFilterChain.ATTR_KEY_I_PROCESSTIME, System.currentTimeMillis() - startTime); context.getHeader().setRespCode(Optional.of("0000")); context.getHeader().setRespMessage(Optional.of("成功")); out.writeMessageBegin(new TMessage(context.getHeader().getMethodName(), TMessageType.CALL, context.getSeqid())); soaProcessFunction.getResSerializer().write(result, out); out.writeMessageEnd();
@Override public void run() { final TransactionContext context = TransactionContext.Factory.getCurrentInstance(); final SoaHeader soaHeader = new SoaHeader(); final TSoaTransport soaTransport = new TSoaTransport(); TProcessor<?> soaProcessor = soaProcessors.get(new ProcessorKey(soaHeader.getServiceName(), soaHeader.getVersionName())); if (soaProcessor == null) { throw new SoaException(SoaBaseCode.NotFoundServer); soaHeader.setRespCode(Optional.of(e.getCode())); soaHeader.setRespMessage(Optional.of(e.getMsg())); protocol.writeMessageBegin(new TMessage(soaHeader.getServiceName() + ":" + soaHeader.getMethodName(), TMessageType.REPLY, context.getSeqid())); protocol.writeMessageEnd();
final SoaHeader soaHeader = new SoaHeader(); inputSoaTransport = new TSoaTransport(inputBuf); context.setHeader(soaHeader); String serviceKey = soaHeader.getServiceName() + "." + soaHeader.getVersionName() + "." + soaHeader.getMethodName() + ".producer"; Map<ConfigKey, Object> configs = RegistryAgentProxy.getCurrentInstance(RegistryAgentProxy.Type.Server).getConfig(false, serviceKey); final TSoaTransport finalInputSoaTransport = inputSoaTransport; if (soaHeader.isAsyncCall()) { isAsync = true; executorService.execute(() -> processRequestAsync(ctx, inputBuf, finalInputSoaTransport, inputProtocol, context, startTime, processData)); if (soaHeader.isAsyncCall()) { isAsync = true; processRequestAsync(ctx, inputBuf, inputSoaTransport, inputProtocol, context, startTime, processData);
private static void methodInvoke(Class<?> logClass, SoaHeader soaHeader, String methodName, Consumer<Logger> loggerConsumer, Object... args) { try { ProcessorKey key = new ProcessorKey(soaHeader.getServiceName(), soaHeader.getVersionName()); ClassLoader appClassLoader = SoaAppClassLoaderCache.getAppClassLoaderMap().get(key); if (appClassLoader != null) { Object appLogger = getLogger(appClassLoader, logClass, appClassLoader.hashCode()); Method infoMethod = getMethod(methodName, logClass, appLogger, appClassLoader.hashCode()); infoMethod.invoke(appLogger, args); } else { Logger containerLogger = LoggerFactory.getLogger(logClass); loggerConsumer.accept(containerLogger); } } catch (Exception e) { //有异常用容器的logger打日志 LOGGER.error(e.getMessage()); Logger containerLogger = LoggerFactory.getLogger(logClass); loggerConsumer.accept(containerLogger); } }
throw x; } else if (context.getSeqid() != msg.seqid) { throw new TApplicationException(4, soaHeader.getMethodName() + " failed: out of sequence response"); } else { if ("0000".equals(soaHeader.getRespCode().get())) { throw new SoaException(soaHeader.getRespCode().get(), soaHeader.getRespMessage().get());