Atitit.atiRI 与 远程调用的理论and 设计
1. 怎么做到透明化远程服务调用?
怎么封装通信细节才能让用户像以本地调用方式调用远程服务呢?对java来说就是使用代理!java代理有两种方式:1) jdk 动态代理;
2. 2 怎么对消息进行编码和解码
作者:: ★(attilax)>>> 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 汉字名:艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://blog.csdn.net/attilax
2.1. 确定消息数据结构dsl
接口名称(class).method(param) 参数类型&参数值
要是只一个method,可以反射参数型...贝儿,就要手动指定型..
4)超时时间
5)requestID,标识唯一请求id,在下面一节会详细描述requestID的用处。
同理服务端返回的消息结构一般包括以下内容。
1)返回值
2)状态code
3)requestID
2.1.1. 消息里为什么要带有requestID?
为异步处理
2.2. 序列化与反序列化 json
3. 通信 http
4. 发布自己的服务
有没有一种方法能实现自动告知,即机器的增添、剔除对调用方透明,调用者不再需要写死服务提供方地址?当然可以,现如今zookeeper被广泛用于实现服务自动注册与发现功能!
简单来讲,zookeeper可以充当一个服务注册表(Service Registry),让多个服务提供者形成一个集群,让服务消费者通过服务注册表获取具体的服务访问地址(ip+端口)去访问具体的服务提供者。如下图所示:
参考
你应该知道的 RPC 原理 - 文章 - 伯乐在线.html