pb调用java_Java开发Grpc,打印debug请求,响应信息

需求

在开发java项目,用到grpc的时候,我们发现调试grpc调用比较不方便,因为grpc基于http2协议封装了请求参数和响应结果,人眼一下子还是不能快速看到请求参数和响应结果的,所以我们需要掌握打印请求参数和响应信息的手段

c0bd1b84eebf5ef3a76c38819d988c38.png

原始代码

 /** * Get topics (max 10) for our project ID: the topic list is logged to the logger. * * @param projectID the GCP project ID to get the pubsub topics for. This is a string like * "projects/balmy-cirrus-225307" where "balmy-cirrus-225307" is * the project ID for the project you created. */ public void getTopics(String projectID) { logger.log(Level.INFO, "Will try to get topics for project {0} ...", projectID); ListTopicsRequest request = ListTopicsRequest.newBuilder() .setPageSize(10) // get max 10 topics .setProject(projectID) // for our projectID .build(); ListTopicsResponse response; try { response = blockingStub.listTopics(request); } catch (StatusRuntimeException e) { logger.log(Level.WARNING, "RPC failed: {0}", e.getStatus()); return; } logger.log(Level.INFO, "Topics list: {0}", response.getTopicsList()); }

这是来自官方example的一段代码片段,大多数的请求调用,都是这样。

封装Pb to json转码

pb是二进制协议,我们需要封装一个转换为Json的工具类

package com.xxx.xxx.xxx.app.util;import com.google.protobuf.MessageOrBuilder;import com.google.protobuf.util.JsonFormat;public class PbJsonHelper { /** * 打印Pb 为 JSON字符串 * @param any * @return */ public final static String toJson(MessageOrBuilder any) { try { return JsonFormat.printer().includingDefaultValueFields().print(any); } catch (Exception e) { //TODO 打印日志或者什么的 } return ""; }}

打印请求信息和响应结果

 /** * Get topics (max 10) for our project ID: the topic list is logged to the logger. * * @param projectID the GCP project ID to get the pubsub topics for. This is a string like * "projects/balmy-cirrus-225307" where "balmy-cirrus-225307" is * the project ID for the project you created. */ public void getTopics(String projectID) { logger.log(Level.INFO, "Will try to get topics for project {0} ...", projectID); ListTopicsRequest request = ListTopicsRequest.newBuilder() .setPageSize(10) // get max 10 topics .setProject(projectID) // for our projectID .build(); ListTopicsResponse response; String currentMethod = "getTopics";  log.info(currentMethod + " send request: {}, response: {}",  PbJsonHelper.toJson(request), PbJsonHelper.toJson(response)); try { response = blockingStub.listTopics(request); } catch (StatusRuntimeException e) { logger.log(Level.WARNING, "RPC failed: {0}", e.getStatus()); return; } logger.log(Level.INFO, "Topics list: {0}", response.getTopicsList()); }

注意看这个新增的代码

 String currentMethod = "getTopics";  log.info(currentMethod + " send request: {}, response: {}",  PbJsonHelper.toJson(request), PbJsonHelper.toJson(response));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值