java命令行中的DstRpcServer怎么运行?操作步骤:天天快播报
1. 问题描述
(相关资料图)
我们的项目是基于端到端通信的。分为客户端、服务端。项目大致分为5个模块。 server、client、core、common以及test模块。 显而易见,server是服务端模块,client是客户端模块,core是项目核心数据结构模块,common是公共类模块(比如一些工具类),test模块从各个子项目抽出来的作为一个单独的test模块。 项目地址:DistKV Project 欢迎star、fork以及contributing。现在的问题是:需要在test模块中测试跟服务端的通信,看得到的结果是否符合预期。 最简单的做法就是:在测试的时候,我们在server模块,通过IEDA点击绿色的Run按钮,就可以启动服务端了,然后在test模块运行测试代码,完成了测试之后,我们再去server模块Stop掉服务端。 这样做存在的问题在于:每次测试都要Run一下服务端的代码,不麻烦? 而且我们运行mvn test命令的时候,应该不需要关心server模块的东西。这称为"解耦合"?
2. 解决办法
我们先考虑在命令行中应该怎么去跑一个程序。简单的Hello World大家都会跑,无非就是先用javac编译,再java运行。但是Hello World不需要依赖其他jar包,所以这样是可行的。 而我们的服务端DstRpcServer.java文件里面依赖了很多第三方包,所以我们单纯的进入到server模块的DstRpcServer.java文件所在路径,执行下面两条语句是不行的。 javac DstRpcServer.java以及 java DstRpcServer原因有两个:
第一个是依赖很多第三方jar包。第二个是因为该路径不是classpath。
注:maven项目的classpath一般在模块下的target/classes下面。 因此,如果我们要在命令行中运行这个DstRpcServer.java,应该怎么运行? 第一步:需要将相关依赖打包成一个jar包,设置DstRpcServer为入口主类。此阶段只要借助以下插件完成。
maven-assembly-pluginjar-with-dependenciesorg.dst.server.service.DstRpcServermake-assemblypackagesingle
第二步:运行 java -classpath C:\Users\Administrator\Desktop\gitProject\dst\server\target\dst-server-1.0-SNAPSHOT-jar-with-dependencies.jar org.dst.server.service.DstRpcServer此处的classpath是我本地项目的路径。类名应该是完整类名,即包名+类名。 但我们怎么在执行mvn test的时候让其执行呢。 完整解决办法:我们在test模块中,利用ProcessBuilder类去新创建一个进程去执行这个命令。执行完之后再销毁该进程。 需要注意的点是:我们需要根据每个人电脑的上的项目路径来动态获取classpath。
public class TestUtil { private static final Logger LOGGER = LoggerFactory.getLogger(TestUtil.class); //get the relative path private static final String SUFFIX_JAR_DIR = "server" + File.separator + "target" + File.separator + "dst-server-1.0-SNAPSHOT-jar-with-dependencies.jar"; private static Process rpcServerProcess = null; /** * @param command the command to start rpc server using a new process. */ private static void executeCommand(Listcommand) { try { LOGGER.debug("Executing command: {}", String.join(" ", command)); ProcessBuilder processBuilder = new ProcessBuilder(command).redirectOutput(ProcessBuilder.Redirect.INHERIT) .redirectError(ProcessBuilder.Redirect.INHERIT); rpcServerProcess = processBuilder.start(); // TODO(qwang): Refine this wait rpcServerProcess.waitFor(1, TimeUnit.SECONDS); } catch (Exception e) { rpcServerProcess.destroy(); throw new RuntimeException("Error executing command " + String.join(" ", command), e); } } public static void startRpcServer() { final File userDir = new File(System.getProperty("user.dir")); // get the absolute path final String jarDir = userDir.getParent() + File.separator + SUFFIX_JAR_DIR; final ListstartCommand = ImmutableList.of( "java", "-classpath", jarDir, "org.dst.server.service.DstRpcServer" ); executeCommand(startCommand); } public static void stopRpcServer() { rpcServerProcess.destroy(); }}
然后在测试代码中调用该类的方法。
public class DstRpcServerTest { @Test public void testRpcServer() { //start the server TestUtil.startRpcServer(); RpcClientOptions options = new RpcClientOptions(); options.setProtocolType(Options.ProtocolType.PROTOCOL_BAIDU_STD_VALUE); options.setWriteTimeoutMillis(1000); options.setReadTimeoutMillis(1000); options.setMaxTotalConnections(1000); options.setMinIdleConnections(10); String url = "list://127.0.0.1:8082"; RpcClient client = new RpcClient(url, options); DstStringService stringService = BrpcProxy.getProxy(client, DstStringService.class); // Test string put request DstServerProtocol.StringPutRequest stringPutRequest = DstServerProtocol.StringPutRequest.newBuilder() .setKey("k1") .setValue("v1") .build(); DstServerProtocol.StringPutResponse stringResponse = stringService.strPut(stringPutRequest); Assertions.assertEquals("ok", stringResponse.getResult()); // Test string get request DstServerProtocol.StringGetRequest strGetRequest = DstServerProtocol.StringGetRequest.newBuilder() .setKey("k1") .build(); DstServerProtocol.StringGetResponse stringGetRequest = stringService.strGet(strGetRequest); Assertions.assertEquals("v1", stringGetRequest.getResult()); client.stop();// stop the server TestUtil.stopRpcServer(); }}
标签:
相关推荐:
最新新闻:
- 《黑豹2》明日上映 漫威:接收全方位炸裂视效冲击!
- 经典摔角综合格斗游戏 《周末勇士》登陆steam:全球微速讯
- java命令行中的DstRpcServer怎么运行?操作步骤:天天快播报
- 今日播报!视频会员越来越贵 权益却在打折:体系很复杂 充值套路多
- 《如龙 维新!极》新情报:队士能力及编组系统介绍|当前独家
- 杀不死的「去中心化」:每日速读
- 2023年,我们需要怎样的企业家精神:世界快消息
- iPhone 14 Pro全系降价700元:苹果坐不住了
- 2023年中国汽油行业市场供需现状分析 汽油出口金额创历史峰值【组图】_天天快资讯
- 要闻:腾讯成立职业技能培训学校公司 注册资本100万元
- 环球头条:2万元的iPhone上热搜 网友:不是它疯了就是我疯了
- 环球通讯!世嘉发布神秘手游新作先行预告 2月10日正式公布
- 焦点资讯:男子礁石上钓鱼被海浪拍进石缝 垂钓别选偏僻海域
- 生活逃不过科技与狠活:世界视点
- 每日热门:微软Bing已经引入ChatGPT 搜索市场要变天?
- 特斯拉又出事故 高速撞车 每日焦点
- iPhone 14到手4899元 史低价快来捡漏 报道
- 比尔盖茨约马斯克做慈善家:咱们把钱全捐了-环球观天下
- 《阿凡达:水之道》导演卡梅隆diss流媒体:观众需要回到影院去!
- 葛优起诉哔哩哔哩网络侵权:答辩期及举证期满后第3日开庭审理。-世界时讯
- 每日热讯!为什么三体不稳定,我们的太阳系如此稳定?
- RTX4070 Ti比A卡低了60W功耗 4年能省2300多元
- 环球快看:日本政府否认雨宫正佳将接棒央行传闻,日元反弹
- 全球微头条丨生存恐怖游戏《原始预兆》新预告 红发美女打恐龙
- 四川地下皇帝:400亿黑财帝国覆灭记
- 主播说联播丨满目春光,满怀希望,奔向美好!
- 《死亡空间:重制版》暂未打算支持Mod或加入新难度模式-热点
- 路畅科技(002813.SZ)拟增发收购中联高机100%股权开拓高空作业平台业务:环球新资讯
- 全球头条:《卧龙:苍天陨落》新演示 大战魔化武将颜良文丑
- 抒写心情的短句子8个字(实用278句)
- 路痴党福音!《星战绝地:幸存者》有快速旅行
- 天天观速讯丨男子油锅炸元宵现场惨烈 网友:需要穿防护服操作
- 小米预计今年手机出货可达1.65亿部 资本市场看好
- 仍然是美国最畅销的汽车之一!特斯拉MODEL Y在美国涨价超万元:每日观察
- 谁能拯救量子力学?:最新快讯
- 环球热文:用户在iOS 16.3更新后发现一个大Bug
- 国内油价上调:又涨价了:当前聚焦
- 比亚迪:1月汉卖出1.22万辆 宋Plus也格外火
- 推理游戏《重返犯罪现场》中文版实机视频_环球关注
- 《星空》玩家能偷窃NPC东西 与《辐射》类似
- 动视暴雪高管暗示:《暗黑破坏神4》公测即将到来:每日资讯
- 当前快讯:《卧龙:苍天陨落》新情报:三种线上模式、伙伴武将
- 世界热讯:不必玩前作!《心灵杀手2》对新玩家也很友好
- 苹果新iPhone将没有充电口 取消物理按键 天天时快讯
- 最资讯丨曝RTX 3060还有新版本:2000出头
- 苹果iPhone 16将推Ultra超旗舰 起步就12000元 世界今头条
- 可运行孤岛危机!国产显卡摩尔线程MTT S80绝了-聚看点
- 性能炸裂!AMD锐龙7 7840HS测试比R7 6800H快26%_快资讯
- 《地平线》多人游戏可能还会登陆手机和PC|当前要闻
- 《黑豹2》豆瓣暴跌至5.8分:特效垃圾 剧情拖沓
- Steam新一周销量榜 《霍格沃茨之遗》登顶:天天短讯
- 今日看点:【手慢无】2899!小米平板Book二合一电脑首发
- 国产的会跟进吗?特斯拉在美国提高Model Y价格:涨价近7000元
- 当前简讯:附带散热小风扇亮了!第一款消费级PCIe Gen5 NVMe SSD曝光
- OpenAI强化!微软推出Teams高级版|当前观点
- 世界看热讯:有钱就是可以为所欲为!苹果连续第16年成为“全球最受尊敬的公司”
- 全球快资讯丨提高市占率 高盟新材拟扩产胶粘剂新材料
- 新能源汽车比亚迪,新款车子要来了。而且属于高端车|焦点速看
- 天天观焦点:天气通_关于天气通的基本详情介绍
- 男子将厕所改造成电竞房:马桶当凳子 实现游戏自由
- 《心灵杀手2》将迎合新老玩家 没玩过前作没关系
- 印度公司生产眼药水致人失明死亡 美国下令停售
- 通讯!《仙剑奇侠传7》今年夏季加入Xbox Game Pass
- 曝一加11还有8G+128G的版本
- 一加Ace 2真机曝光:双曲面屏幕-当前视讯
- 【手慢无】小米米家毛球修剪器39.9元
- 比亚迪公布1月成绩单:销售超15万辆 出口海外超万辆
- 口罩生产许可证怎么查_口罩生产许可证|天天日报
- 【全球时快讯】人人视频遭网飞、索尼、迪士尼等多家海外影视公司起诉
- 经济困难时期,你该做点什么?
- 叶文洁演员祝大家元宵节快乐!统帅年轻时笑容迷人
- 全球讯息:iPhone 14 Pro系列官方降价计划曝光 全系下调700元
- 东井除湿机_当前观察
- 今日热闻!Moon Studios总监:新作就像是他们的“塞尔达”
- 距离R星公布《GTA6》开发整一年:玩家们心如猫抓! 环球微动态