1 使用背景
项目为所有后端的最上游,处理前端请求,分配给其他后端,会调用下游服务,因此需要服务调用。目前项目使用webservice 与 dubbo这两种方式,对外提供本项目接口访问途径,暴露service接口。
1.1 配置文件
webService
webService一共有JAXM&SAAJ、JAX-WS(JAX-RPC)、JAX-RS 这三种规范,本项目使用jaxws规范。
具体配置如图:
endpoint 为发布服务端,id即为发布的接口服务名称,调用者需要用此id,implementor具体实现类(Impl类的注解用的是@Service时,此处只需要写 # + impl的类名,注解用的是@WebService时,此处需要写全路径),implementorClass为声明服务类(service 与 impl 在同一个项目中,可能不需要写这个参数),address为该服务的地址(发布后),jaxws:inInterceptors为该服务的拦截器。
需要用到cxf框架,配置cxf路径参数(默认是/services)
服务调发布后,访问路径为:http:// + 服务端服务器ip地址 + CXF框架地址 + 服务地址(即address) + 统一参数(即?wsdl)
样例http://localhost:8080/cxf/orderQueryEspService?wsdl
这个wsdl文件,可以用来查看这个webservice服务的方法,入参,出参等信息。
client 为客户端,address为客户端访问路径
dubbo 版本 apache 2.7.6
dubbo 接口服务配置
dubbo:service为提供方声明需要暴露的服务接口,ref是提供方接口实例bean的id(引用已存在的spring bean 对象)
dubbo:reference为引用暴露的dubbo服务,生成可以提供远程调用的service服务,id为自己定义的名称(给外界使用),registry 代理服务注册地址
dubbo 框架配置
dubbo注册地址:
这里是一个xml,用来写不同环境下dubbo注册地址的形参 address 注册的服务器地址 group 注册的组名
registry protocol : 注册中心(Zookeeper、Redis、Simple、Multicast、Etcd3 有这几种) 本项目采用zookeeper
consumer和provider 启动时,将自身的url注册到zookeeper的子节点中,断开连接后,子节点删除。
dubbo 服务的注册 订阅 退订 等操作,通过 ZookeeperRegistry 这个类及其父类 来实现。
dubbo注册实参:
这里只放一个环境的注册地址实参,Dubbo提供的注册中心
ZookeeperRegistry源码介绍
构造方法
设置了根目录 recover 方法,添加了重连回调
doRegister 注册节点,
toUrlPath(url) 获取节点要创建在什么目录下,具体如下:{root}/{interface}/{category}/{url.toFullString()}
url.getParameter(DYNAMIC_KEY, true) 用来判断是否要建立永久节点,默认为非永久节点,即true
doUnregister 删除注册的节点
doSubscribe 订阅介绍
1.2 webservice 与 dubbo 介绍
webservice可以用于不同语言项目的互相调用,使用了http协议传输数据,xml封装数据。目前总体来说,webservice 有 三种规范,两种框架(Axis2 与 CXF,Axis2侧重多语言结合,CXF侧重与spring集成)。
参考链接:https://xinyuan.blog.youkuaiyun.com/article/details/111380202
ZookeeperRegistry 相关源码讲解:https://www.jianshu.com/p/d89023a266be