目的:调用远程业务逻辑方法,并对返回的结果进行处理。规范化了调用流程,可扩展支持多种协议:HTTP, JMS, RMI, FTP等,实现负载均衡,异步调用。默认给出HTTP实现。
概念:
Agent: 我们将这套实现称为agent
Server:远程应用服务, RPC服务的提供者。
Client:客户端,RPC服务的调用者
Agent server:agent在server端的部分
Agent client: agent在client端的部分
Agent group:具有相同业务逻辑的远程服务器的组合,提供相同的远程业务服务。
基本结构:以HTTP方式为例了解一下agent的基本结构
Agent client
组件 | 描述 |
Business client | Client端业务逻辑,初始化agent请求,远程调用的发起者 |
Agent client | Agent client端流程 |
Request encoder | Request编码器,将agent request序列化成文本字符串 |
HTTP executor | 发送远程调用请求,接收响应结果 |
Load balancer | 采用轮循方式的负载权衡机制 |
Response decoder | 响应结果的解码器,发序列化 |
Result handler | Agent response结果的处理者 |
Agent server
组件 | 描述 |
Agent servlet | J2EE servlet, http agent server side entry |
Agent service | Agent server 端流程 |
Request decoder | Request解码器,反序列化agent request |
Request handler | 处理agent request |
App command assembler | 将agent请求装配成义务逻辑执行参数并初始化agent上下文 |
Agent context | Agent上下文,包括会话标识符,上次调用时间等,可供扩展使用,比如为了不改变agent server端业务逻辑的接口,提供给agent系统的实现,可以将一些值放在agent context中。 |
App Logic Command | 业务逻辑的调用者 |
Response assembler | 将返回结果和agent上下文装配成agent response |
Response encoder | 将agent response序列化成文本字符串 |
如果采用是其他通信方式agent servlet可能就被换成比如jms listener,FTP receiver, RMI service等, 有待以后有需要的时候再实现。
原理:
l 初始化agent group,启动agent client,agent server
l 业务客户端构建agent请求并调用agent client
l Agent client序列化业务请求
l Executor从load balancer中得到当前供调用的agent,通过HttpRequest的body发送业务请求
l Load balancer轮询下一个agent
l Agent server收到请求,调用agent service
l Agent service将请求反序列化,并装配成业务逻辑命令参数的形式,可供业务逻辑调用命令执行,同时初始化agent上下文
l 业务逻辑调用者调用服务器端本地业务逻辑执行并返回结果
l Response装配器将agent context上下文和返回结果装配成agent response
l Response编码器序列化response,并由servlet通过HttpResponse的body发送应答
l Executor收到应答后,从HttpResponse的body里取出agent response的内容
l Response解码器将其解码反序列化成agnet response
l Agent client调用result handler进行返回结果的处理
Client端同步调用顺序图
Client端异步调用顺序图
Server端顺序图