zoukankan      html  css  js  c++  java
  • jmeter grpc 自定义开发java请求案例

    1.主要实现方法是借助JavaSamplerClient 实现接口:

    import org.apache.jmeter.config.Arguments;
    import org.apache.jmeter.protocol.java.sampler.JavaSamplerClient;
    import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
    import org.apache.jmeter.samplers.SampleResult;


    以下main注释的方法主要用于本地调试接口,setup主要实现前置操作,构造初始数据,runTest主要实现接口调用和返回
    public class ClientPredictGrpc implements  JavaSamplerClient {
        private static final Logger logger = LoggerFactory.getLogger(ClientPredictGrpc.class);
        private int port ;
        private String ip ;
        private BatchInferenceRequest batchInferenceRequest;
        @Override
        public void setupTest(JavaSamplerContext ctx) {
                String serviceId = ctx.getParameter("serviceId");
                String userId = ctx.getParameter("userId");
                Random random =new Random();
                this.ip=ctx.getParameter("ip");
                this.port =ctx.getIntParameter("port");
                int columns = ctx.getIntParameter("featureCols");
                int uidNumber = ctx.getIntParameter("batchSize");
                this.batchInferenceRequest =new BatchInferenceRequest();
                this.batchInferenceRequest.setServiceId(serviceId);
                this.batchInferenceRequest.setCaseId(Long.toString(System.currentTimeMillis()));
                List<BatchInferenceRequest.SingleInferenceData> singleInferenceDataList = Lists.newArrayList();
                BatchInferenceRequest.SingleInferenceData singleInferenceData =new BatchInferenceRequest.SingleInferenceData() ;
                //todo set batch list the same batchList data each batch request
                for (int j = 0; j< columns; j++){
                    String featureColumnName=String.format("x%d",j);
                    singleInferenceData.getFeatureData().put(featureColumnName, random.nextInt(2));
                }
                for (int i = 0; i < uidNumber; i++) {
                    Map<String,Object> uidMap=new HashMap<>();
                    uidMap.put("user_id", userId);
                    singleInferenceData.getSendToRemoteFeatureData().putAll(uidMap);
                    singleInferenceData.setIndex(i);
                    singleInferenceDataList.add(singleInferenceData);
                }
                this.batchInferenceRequest.setBatchDataList(singleInferenceDataList);
    
        }
    
        @Override
        public SampleResult runTest(JavaSamplerContext ctx) {
            SampleResult result= new SampleResult();
            result.sampleStart();
            try {
                JSONObject jsonObject= ClientGrpc.call(this.ip,this.port,this.batchInferenceRequest);
                if (jsonObject.get("retcode") == null || !jsonObject.getString("retcode").equals(InferenceRetCode.OK)){
                    if (jsonObject.get("retcode") == null){
                        result.setSuccessful(false);
                        result.setResponseData(jsonObject.toJSONString(),"utf-8");
                        result.setResponseCode("retcode is null ");
                    }else {
                        result.setResponseData(jsonObject.toJSONString(), "utf-8");
                        result.setDataType(SampleResult.TEXT);
                        result.setSuccessful(false);
                        result.setResponseMessage("failed");
                        result.setResponseCode(jsonObject.getString("retcode"));
                    }
                }else{
                    result.setResponseData(jsonObject.toJSONString(),"utf-8");
                    result.setDataType(SampleResult.TEXT);
                    result.setSuccessful(true);
                    result.setResponseMessage("success");
                    result.setResponseCode("0");
                }
            }catch (Exception e){
                result.setSuccessful(false);
                if(e.getMessage() !=null) {
                    result.setResponseData(e.getMessage(), null);
                    result.setResponseCode("grpc exception");
                }
            }finally {
                result.sampleEnd();
            }
    
            //logger.info("result finally get as String is : "+ result.getResponseDataAsString());
            return result;
        }
    
        @Override
        public void teardownTest(JavaSamplerContext ctx) {
    
        }
    
        @Override
        public Arguments getDefaultParameters() {
            Arguments arguments =new Arguments();
            arguments.addArgument("ip","");
            arguments.addArgument("port","");
            arguments.addArgument("featureCols","");
            arguments.addArgument("userId","");
            arguments.addArgument("serviceId","");
            arguments.addArgument("batchSize","");
            return arguments;
        }
    
    //    public static void main(String[] args) {
    //        ClientPredictGrpc demo=new ClientPredictGrpc();
    //        Arguments arguments = new Arguments();
    //        String uid="a36fda4444dbdfdb1714c81e86b13c06,a46458c10546bbe794dbca88cd0a4832";
    //
    //        arguments.addArgument("ip","172.16.153.119");
    //        arguments.addArgument("port","8000");
    //        arguments.addArgument("header","5");
    //        arguments.addArgument("userId",uid);
    //        arguments.addArgument("serviceId","heterolr01");
    //        JavaSamplerContext ctx=new JavaSamplerContext(arguments);
    //        demo.setupTest(ctx);
    //        demo.runTest(ctx);
    //        demo.teardownTest(ctx);
    
    
    //    }
    
    
    }
    

      

    grpc client类:

    public class ClientGrpc {
    
        private static Random random = new Random();
    
        private static GrpcConnectionPool GRPC_CONNECTION_POOL = GrpcConnectionPool.getPool();
        public static ManagedChannel createManagedChannel(String ip, int port) throws Exception {
    
            return GRPC_CONNECTION_POOL.getManagedChannel(ip, port);
    
        }
    
        static JSONObject call(String ip,int port,BatchInferenceRequest batchInferenceRequest) {
                JSONObject predictMessage=null;
                ManagedChannel managedChannel = null;
                try {
                    managedChannel = createManagedChannel(ip, port);
                    InferenceServiceProto.InferenceMessage.Builder inferenceMessageBuilder = InferenceServiceProto.InferenceMessage.newBuilder();
                    inferenceMessageBuilder.setBody(ByteString.copyFrom(JSON.toJSONString(batchInferenceRequest), "UTF-8"));
                    InferenceServiceGrpc.InferenceServiceBlockingStub blockingStub = InferenceServiceGrpc.newBlockingStub(managedChannel);
                    InferenceServiceProto.InferenceMessage inferenceMessage = blockingStub.batchInference(inferenceMessageBuilder.build());
                    String result = new String(inferenceMessage.getBody().toByteArray());
                    predictMessage = JSONObject.parseObject(result);
    
    
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return predictMessage;
        }
    
    
    
    }
    

      

  • 相关阅读:
    【Rust】元组display
    【Rust】原始类型布尔
    【Rust】原始类型浮点
    【Rust】元组transpose
    【Rust】结构体
    【Rust】原始类型数组
    【Rust】结构体square
    【Rust】结构体area
    1月12日 家庭小账本(改) 开发记录
    1月18日 学习记录
  • 原文地址:https://www.cnblogs.com/SunshineKimi/p/14434609.html
Copyright © 2011-2022 走看看