分布式服务如何实现服务回调-流程

1.服务提供者提供的服务接口类中 先声明好 哪些参数类型是 回调类型的,从而同普通的方法参数区别开来
    @Callback(MyLister.class)
    public interface DemoService{
     void handle(String cond,MyLister callback);}
  2.客户端一启动时都提供一个的回调服务集中处理回调请求
  2.客户端如是远程调用(本地调用就不需要了)该服务接口的某些方法,先判断这些方法的参数是否包含回调的参数类型
  3.客户端将回调的参数类型对象,作为服务发布到服务总线上去,以供服务端远程调用。
  4.客户端将回调的参数类型对象替换为一个代理对象(只包含id 和 客户地址信息),作为参数传给服务方法.
  5.服务器在响应远程方法(本地方法就不需要了)时,也根据服务接口判断该方法是否包含了回调类型参数
  6.服务器根据远程传过来回调类型参数,转换成连接到客户端回调服务的远程服务代理。
  7.服务器调本地的服务方法。
  8.连接客户端的远程服务代理在执行时将代理对象的id信息填充到请求报文中的属性体中。发给客户端服务器
  9.客户端的接收到报文后,根据报文信息调用回调服务来实现
  10.客户端回调服务查找报文的属性体,找到客户端发布到服务总线的 回调对象的id,并定位到回调对象
  11.调用回调对象的方法。后期和分布式服务一样.

  其实远程回调就是 在以前远程访问的基础上,加上了一个 反向的远程调用而已。难点就是要做到透明,每个服务器都部署一个响应回调请求的集中服务起了关键作用,另外注意的地方就是: 回调对象成为服务,它的有效期也只是在一个调用中,调用完后,记得要清除它,否则会有内存泄露的问题

猜你喜欢

转载自xiaoyuwei.iteye.com/blog/1135607
今日推荐