目的:调用远程业务逻辑方法,并对返回的结果进行处理。规范化了调用流程,可扩展支持多种协议: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端顺序图