一起写RPC框架(二十四)RPC测试篇一---基本业务逻辑的测试
来源:互联网 发布:淘宝上怎么发布宝贝 编辑:程序博客网 时间:2024/05/17 07:21
进入了基本的测试篇,首先我们先进入基本的代码测试,我们先跑通代码:
首先我们先写两个简单的接口:
HelloService.java
package org.laopopo.example.demo.service;/** * * @author BazingaLyn * @description * @time * @modifytime */public interface HelloSerivce {String sayHello(String str);}
ByeService.java
package org.laopopo.example.demo.service;public interface ByeService {String sayBye(String str);}
给出具体的实现:
HelloSerivceImpl.java
package org.laopopo.example.demo.service;import org.laopopo.client.annotation.RPCService;/** * * @author BazingaLyn * @description Demo * @time 2016年8月19日 * @modifytime */public class HelloSerivceImpl implements HelloSerivce {@Override@RPCService(responsibilityName="xiaoy",serviceName="LAOPOPO.TEST.SAYHELLO",isVIPService = false,isSupportDegradeService = true,degradeServicePath="org.laopopo.example.demo.service.HelloServiceMock",degradeServiceDesc="默认返回hello")public String sayHello(String str) {//真实逻辑可能涉及到查库return "hello "+ str;}}它对应的mock类HelloServiceMock.java
package org.laopopo.example.demo.service;public class HelloServiceMock implements HelloSerivce {@Overridepublic String sayHello(String str) {//直接给出默认的返回值return "hello";}}ByeServiceImpl.java
package org.laopopo.example.demo.service;import org.laopopo.client.annotation.RPCService;public class ByeServiceImpl implements ByeService {@Override@RPCService(responsibilityName="fly100%",serviceName ="LAOPOPO.TEST.SAYBYE",isVIPService = true,isSupportDegradeService = false)public String sayBye(String str) {return "bye " + str;}}
接下来我们看看服务提供者的配置:
package org.laopopo.example.generic.test_1;import org.laopopo.client.provider.DefaultProvider;import org.laopopo.common.exception.remoting.RemotingException;import org.laopopo.example.demo.service.ByeServiceImpl;import org.laopopo.example.demo.service.HelloSerivceImpl;import org.laopopo.remoting.netty.NettyClientConfig;import org.laopopo.remoting.netty.NettyServerConfig;public class ProviderTest {public static void main(String[] args) throws InterruptedException, RemotingException {DefaultProvider defaultProvider = new DefaultProvider(new NettyClientConfig(), new NettyServerConfig());defaultProvider.registryAddress("127.0.0.1:18010") // 注册中心的地址.serviceListenPort(8899) // 暴露服务的端口.publishService(new HelloSerivceImpl(), new ByeServiceImpl()) // 暴露的服务.start(); // 启动服务}}
package org.laopopo.example.generic.test_1;import io.netty.util.internal.ConcurrentSet;import java.util.concurrent.ConcurrentMap;import org.laopopo.base.registry.DefaultRegistryServer;import org.laopopo.base.registry.RegistryServerConfig;import org.laopopo.common.rpc.RegisterMeta;import org.laopopo.common.rpc.RegisterMeta.Address;import org.laopopo.remoting.netty.NettyServerConfig;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class RegistryTest {private static final Logger logger = LoggerFactory.getLogger(RegistryTest.class);private static DefaultRegistryServer defaultRegistryServer;public static void main(String[] args) {Thread t = new Thread(new RegistryTest1Scanner(), "timeout.scanner"); t.setDaemon(true); t.start(); NettyServerConfig config = new NettyServerConfig();RegistryServerConfig registryServerConfig = new RegistryServerConfig();//注册中心的端口号config.setListenPort(18010);defaultRegistryServer = new DefaultRegistryServer(config,registryServerConfig);defaultRegistryServer.start();}private static class RegistryTest1Scanner implements Runnable { @Override public void run() { for (;;) { try { logger.info("统计中"); Thread.sleep(10000); ConcurrentMap<String, ConcurrentMap<Address, RegisterMeta>> concurrentMap = defaultRegistryServer.getProviderManager().getGlobalRegisterInfoMap(); if(null != concurrentMap){ for(String serviceName:concurrentMap.keySet()){ ConcurrentMap<Address, RegisterMeta> map = concurrentMap.get(serviceName); if(map != null){ for(Address address : map.keySet()){ logger.info("serviceName [{}] address [{}] and detail [{}]",serviceName,address,map.get(address).toString()); } } } } ConcurrentMap<Address, ConcurrentSet<String>> serviceMap = defaultRegistryServer.getProviderManager().getGlobalServiceMetaMap(); if(null != serviceMap){ for(Address address : serviceMap.keySet()){ if(null != serviceMap.get(address)){ for(String str : serviceMap.get(address)){ logger.info("address [{}] provider serivcename [{}]",address,str); } } } } } catch (Throwable t) { logger.error("An exception has been caught while scanning the timeout acknowledges {}.", t); } } } }}服务消费者测试类:
package org.laopopo.example.generic.test_1;import java.util.concurrent.ConcurrentMap;import java.util.concurrent.CopyOnWriteArrayList;import org.laopopo.client.consumer.Consumer.SubscribeManager;import org.laopopo.client.consumer.ConsumerClient;import org.laopopo.client.consumer.ConsumerConfig;import org.laopopo.common.utils.ChannelGroup;import org.laopopo.remoting.netty.NettyClientConfig;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class ConsumerTest {private static final Logger logger = LoggerFactory.getLogger(ConsumerTest.class);private static ConsumerClient commonclient;public static void main(String[] args) throws Throwable {Thread t = new Thread(new SubcribeResultScanner(), "timeout.scanner");t.setDaemon(true);t.start();NettyClientConfig registryNettyClientConfig = new NettyClientConfig();registryNettyClientConfig.setDefaultAddress("127.0.0.1:18010");NettyClientConfig provideClientConfig = new NettyClientConfig();ConsumerClient client = new ConsumerClient(registryNettyClientConfig, provideClientConfig, new ConsumerConfig());client.start();commonclient = client;SubscribeManager subscribeManager = client.subscribeService("LAOPOPO.TEST.SAYHELLO");if (!subscribeManager.waitForAvailable(3000l)) {throw new Exception("no service provider");}Object obj = client.call("LAOPOPO.TEST.SAYHELLO", "shine");if (obj instanceof String) {System.out.println((String) obj);}SubscribeManager subscribeManager2 = client.subscribeService("LAOPOPO.TEST.SAYBYE");if (!subscribeManager2.waitForAvailable(3000l)) {throw new Exception("no service provider");}Object obj1 = client.call("LAOPOPO.TEST.SAYBYE", "shine");if (obj1 instanceof String) {System.out.println((String) obj1);}}private static class SubcribeResultScanner implements Runnable {@Overridepublic void run() {for (;;) {try {logger.info("统计中");Thread.sleep(10000);@SuppressWarnings("static-access")ConcurrentMap<String, CopyOnWriteArrayList<ChannelGroup>> result = commonclient.getGroups();if(result != null){for(String serviceName:result.keySet()){System.out.println(serviceName);for(ChannelGroup channelGroup :result.get(serviceName)){System.out.println(channelGroup.toString());}}}} catch (Throwable t) {logger.error("An exception has been caught while scanning the timeout acknowledges {}.", t);}}}}}
然后运行ProviderTest的main函数:
ProviderTest的运行控制台打印:
我们再回头看看注册中心的打印:
最后我们启动ConsumerTest的main函数类:
程序基本上跑通了~接下来我们测试没有注册中心,服务消费者直连服务提供者的测试
测试源代码请详见:
https://github.com/BazingaLyn/laopopo-rpc/tree/master/laopopo-example/src/main/java/org/laopopo/example/generic/test_1
0 0
- 一起写RPC框架(二十四)RPC测试篇一---基本业务逻辑的测试
- 一起写RPC框架(二十六)RPC测试篇三---限流的测试
- 一起写RPC框架(二十七)RPC测试篇四---性能测试
- 一起写RPC框架(二十五)RPC测试篇二---服务消费者和服务提供者直连测试
- 一起写RPC框架(十四)RPC注册中心一--注册中心的简述
- 一起写RPC框架(十五)RPC注册中心二--注册中心的基本实现
- 一起写RPC框架(九)RPC服务提供端一--服务端的基本代码结构
- 一起写RPC框架(二)RPC之项目搭建
- 一起写RPC框架(二十七)RPC 写在最后
- 一起写RPC框架(十)RPC服务提供端二--服务的编织和注册
- 一起写RPC框架(三)RPC网络模块的搭建一 网络传输模型
- 一起写RPC框架(二十)RPC服务消费者二--服务消费者订阅服务
- 一起写RPC框架(四)RPC网络模块的搭建二 Netty的编码器和译码器
- 一起写RPC框架(二十一)RPC服务消费者三--服务消费者负载策略
- 一起写RPC框架(二十二)RPC服务消费者四--服务消费者服务编织
- 一起写RPC框架(二十三)RPC代码小总结
- 一起写RPC框架(一)RPC之我所见
- 一起写RPC框架(十九)RPC服务消费者一--服务消费者简介
- windos下的内存分配
- unity mono 库编译笔记
- Kaptchar详细配置表
- android 环境配置
- linux下echo命令详解
- 一起写RPC框架(二十四)RPC测试篇一---基本业务逻辑的测试
- 公司自动化测试--需要解决的问题。
- 不要成为“粉丝”——谈谈“偶像崇拜”的成因和危害
- 【Java基础知识】代码块的执行顺序(静态、构造、局部代码块)
- 数组偏移
- 跨平台开发,如何进行版本升级?
- 平均距离
- 文章标题
- 在线笔试中遇到的简单图像内容识别问题