手写 dubbo

简介: 手写 dubbo(2017 最后一篇博客,回家相亲...)    下载 :demo   首先 介绍一下 dubbo大神的 博客地址  :   http://javatar.iteye.

手写 dubbo(2017 最后一篇博客,回家相亲...) 

 

下载demo

 

首先 介绍一下 dubbo大神的 博客地址  :   http://javatar.iteye.com/blog/1123915

 

test



 

 

constructor



 

 

 

refer

public class SocketConsumer implements RpcRefer {
	 
	 @Override
		public <T> T refer(Class<T> interfaceClass, String host, int port) { 
		 return  (T) Proxy.newProxyInstance(interfaceClass.getClassLoader(),  new Class<?>[] {interfaceClass}, new InvocationHandler() {
			
			@Override
			public Object invoke(Object proxy, Method method, Object[] args)
					throws Throwable {
				Socket socket = null;  
				 ObjectInputStream input = null;
	            try {   
	                socket = new Socket(host, port);    
	                DataOutputStream out = new DataOutputStream(socket.getOutputStream());    
	                InvokeEnity entity = new InvokeEnity();
	                entity.setServiceName(interfaceClass.getName());
	                entity.setMethodName(method.getName());
	                ArrayList<String>  parameterTypes= new ArrayList<String>();
	                for (int i = 0; i < method.getParameterTypes().length; i++) {
	                	Class<?> class1 = method.getParameterTypes()[i];
	                	parameterTypes.add(class1.getName());
					}
	                entity.setParameterTypes(parameterTypes);
	                entity.setParameters(CollectionUtils.arrayToList(args));
	                
	                out.writeUTF(FastJsonUtils.toJSONString(entity).toString());  
	                input = new ObjectInputStream(socket.getInputStream());    
	                Object serviceInvoke = input.readObject(); 
	                return serviceInvoke;
	               
	            } catch (Exception e) {   
	            	e.printStackTrace();
	            } finally {  
	                if (socket != null) {  
	                    try {  
	                        socket.close();  
	                    } catch (IOException e) {  
	                        socket = null;      
	                    }  
	                }  
	                if (input != null) {  
	                    try {  
	                    	input.close();  
	                    } catch (IOException e) {  
	                    	input = null;      
	                    }  
	                }  
	            } 
				return null;
			}
		});  
		} 
}

 

 

export

public class SocketProducter implements RpcExport {
	
	@Override
	 public void export(Object service, int port ) {    
	        try {     
	            ServerSocket serverSocket = new ServerSocket(port);    
	            while (true) {    
	                Socket client = serverSocket.accept();    
	                new HandlerThread(client,service);    
	            }    
	        } catch (Exception e) {    
	        	e.printStackTrace();
	        }    
	    }    
	    
	    private class HandlerThread implements Runnable {    
	        private Socket socket;   
	        private Object service ;
	        public HandlerThread(Socket client,Object service) {    
	            socket = client;    
	            this.service = service;
	            new Thread(this).start();    
	        }    
	    
	        public void run() {    
	            try {    
	                DataInputStream input = new DataInputStream(socket.getInputStream());  
	                String request = input.readUTF(); 
	                Object execute = null;
	               if( FastJsonUtils.isJson(request)){ 
	            	   InvokeEnity entityEnity = InvokeEnity.transefer(request);
						String methodName = entityEnity.getMethodName();
						List<String> parameterTypeses = entityEnity.getParameterTypes();
						List<String> parameteres = entityEnity.getParameters();
						Class<?>[] parameterTypes = new Class<?>[parameterTypeses.size()];
						Object[] parameters = new Object[parameterTypeses.size()];
						for (int i = 0; i <parameterTypeses.size(); i++) {
							parameterTypes[i] = Class.forName(parameterTypeses.get(i));
							parameters[i] = parameteres.get(i);
						}  
						execute = CGLibUtils.execute(service, methodName, parameterTypes, parameters);
						
						/* Method method = service.getClass().getMethod(methodName, parameterTypes);  
						 execute = method.invoke(service, parameters);  */
                         
	               }
	               
					
					
	                ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());  
	                out.writeObject(execute);
	                out.close();    
	                input.close();    
	            } catch (Exception e) {    
	            	e.printStackTrace();
	            } finally {    
	                if (socket != null) {    
	                    try {    
	                        socket.close();    
	                    } catch (Exception e) {    
	                        socket = null;    
	                    }    
	                }    
	            }   
	        }    
	    }

		

	
}

 

 

 

public interface UserService {

	 public User getUser(String name);

}

 

public class UserServiceImpl implements UserService {

	@Override
	public User getUser(String name) { 
		User user = new User();
		user.setName(name);
		user.setPassword(name +"1213212");
		return user;
	}

	 

}

 

 

producter 提供者

public class ProducterTest {

	  public static void main(String[] args) {
			RpcFactory rpc = RpcFactory.getInstanceByStrategy("simpleIO");
			RpcExport rpcExport = rpc.getRpcExport();
			UserService service = new UserServiceImpl();
			rpcExport.export(service, Constants.PORT);
	}

}

 

 

consumer消费者

public class ConsumerTest {

	 public static void main(String[] args) {
		 RpcFactory rpc = RpcFactory.getInstanceByStrategy("simpleIO"); 
			RpcRefer rpcRefer = rpc.getRpcRefer();
			UserService userService = rpcRefer.refer(UserService.class, Constants.IP_ADDR, Constants.PORT);
			for (int i = 0; i < 10; i++) {
				User user = userService.getUser("baoyou");
				System.out.println(FastJsonUtils.toJSONString(user).toString());
			}
			 
	}

}

 

 



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

捐助开发者 

在兴趣的驱动下,写一个免费的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(支持支付宝和微信 以及扣扣群),没钱捧个人场,谢谢各位。

 

个人主页http://knight-black-bob.iteye.com/



 
 
 谢谢您的赞助,我会做的更好!

目录
相关文章
|
4天前
|
人工智能 JSON 安全
|
4天前
|
云安全 人工智能 安全
|
4天前
|
人工智能 自然语言处理 数据挖掘
Qwen3.8-Max-Preview深度全解析:2.4万亿参数旗舰MoE模型+Token Plan限时优惠完整落地指南
2026年7月,全新旗舰级混合专家大模型Qwen3.8-Max-Preview正式开放抢先体验,作为通义千问Qwen3系列规格最高、综合推理能力顶尖的新一代模型,该模型总参数量达到2.4万亿(2.4T),是当前线上可调用的原生多模态旗舰模型,综合推理水准对标海外顶级Fable 5模型,在复杂工程开发、长文档深度分析、多步骤智能体自治、跨境多语言创作、海量数据挖掘五大高难度业务场景实现跨越式性能提升。
733 0
|
4天前
|
人工智能 自然语言处理 数据挖掘
最新版通义千问(Qwen3.8-Max-Preview)功能介绍
2026年,通义千问正式推出全新旗舰级大模型 **Qwen3.8-Max-Preview 预览版**,作为首款突破万亿参数规格的新一代基座模型,该模型总参数量达到**2.4万亿**,采用全新迭代的MoE混合专家架构,综合推理性能、长文本处理、多模态理解、复杂任务规划能力全面超越前代Qwen3.7-Max版本,整体实力跻身全球第一梯队,可对标海外顶级旗舰模型,是当前面向复杂工程开发、多智能体协同、超长文档解析、专业办公自动化场景的最优国产基座模型。
769 0
|
2天前
|
自然语言处理 测试技术 API
通义千问Qwen3.8-Max-Preview全功能解析:2.4万亿参数旗舰模型深度使用指南
在大模型技术持续迭代的当下,通义千问推出的Qwen3.8-Max-Preview作为新一代旗舰预览版模型,凭借2.4万亿参数的超大规模、多模态融合能力与全场景适配特性,成为开发者与企业用户探索AI应用的核心工具。该模型采用稀疏混合专家(MoE)架构,是通义千问首个突破万亿参数的多模态模型,可同时处理文本、图像、视频与文档等多种数据形态,在全栈代码开发、复杂逻辑推理、长文档分析与多智能体协作等场景实现跨越式升级。本文将全面拆解Qwen3.8-Max-Preview的核心功能,详解API调用流程与配置方法,覆盖多场景实战技巧,帮助用户快速掌握这款旗舰模型的使用方法,充分释放其性能潜力。
360 1
|
6天前
|
人工智能
Qwen3.8抢先体验!正式版即将发布并开源!
千问Qwen3.8即将开源,参数达2.4T,进化速度以“天”计,实力媲美Fable 5。预览版Qwen3.8-Max已上线阿里Token Plan等平台,限时优惠:日间Credits低至1折,夜间更优,个人/团队版月付仅35元起!
683 27
|
4天前
|
人工智能 测试技术 语音技术
Qwen-Audio-3.0-TTS 正式发布!AI 语音从 “能说话” 升级到 “会带情绪表达”
阿里云发布Qwen-Audio-3.0-TTS语音合成大模型,支持细粒度标签控制(如[gasp][angry])、freestyle自由风格、16种语言及20种方言,声学鲁棒性强。含Flash(首包延时300ms)和Plus(全球榜单冠军)双版本,已在百炼平台开放调用。在阿里云百炼官网:https://t.aliyun.com/U/fPVHqY 免费领取千万Tokens
605 1
|
5天前
|
人工智能 自然语言处理 数据挖掘
Qwen3.8-Max 预览版全解析:2.4 万亿参数旗舰模型,Token Plan 限时优惠指南
Qwen3.8-Max-Preview是通义千问Qwen3系列旗舰MoE大模型,参数达2.4万亿,综合推理能力居行业第一梯队。支持思考/快速双模式,擅长大模型五大高难场景。现于阿里云百炼Token Plan、Qoder及QoderWork上线体验,个人版低至39元/月。在阿里云百炼官网:https://t.aliyun.com/U/fPVHqY 免费领取千万Tokens
542 1
Qwen3.8-Max 预览版全解析:2.4 万亿参数旗舰模型,Token Plan 限时优惠指南

热门文章

最新文章