在之前介绍过dubbo的使用,简单本地搭建了一个实例,原文地址如下:https://blog.csdn.net/liman65727/article/details/80111170
但是只是参照大牛的博客搭建了一个简单的使用实例而已,并没有加入自己的理解。
基本使用可以参看原有的博客就可以了,但是针对其中每一项的配置,并没有自己的总结,这里重新针对这些配置再梳理一遍。
建立一个简单的maven项目,并在resource中建立META-INF/spring/application.xml文件,在这个文件中配置如下信息,从dubbo源码中可以看出,其实启动的路径是可以配置的,如果没有配置,dubbo在启动的时候是会默认去读取这个路径下的配置文件
从某一种程度上来说,服务端只是将服务以dubbo协议提供给客户端,客户端按照dubbo协议调用服务端所提供的服务。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://dubbo.apache.org/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> <!--dubbo应用的服务端与客户端都需要配置name否则会提示no application name 的异常--> <dubbo:application name="dubbo-server"/> <!--协议名称,其实dubbo不止可以用dubbo的协议提供服务,还可以用webservice方式提供服务,这里配置的是dubbo协议--> <dubbo:protocol name="dubbo" port="20880"/> <!--这里没有配置注册中心,即使没有使用注册中心,这个配置也不能省略,要以N/A的值替代--> <dubbo:registry address="N/A"/> <!--暴露指定的服务--> <dubbo:service interface="com.learn.service.api.IPayService" ref="payService"/> <!--暴露指定的服务--> <dubbo:service interface="com.learn.service.api.IQueryService" ref="queryService"/> <!--将指定的service交给spring进行托管--> <bean id="payService" class="com.learn.service.impl.PayServiceImpl"/> <bean id="queryService" class="com.learn.service.impl.QueryServiceImpl"/> </beans>客户端使用实例:
/** * autor:liman * createtime:2019/9/22 * comment: */ public class ClientApp { public static void main(String[] args) throws IOException { ClassPathXmlApplicationContext classPathXmlApplicationContext= new ClassPathXmlApplicationContext(new String[]{"application.xml"}); IQueryService queryService = (IQueryService) classPathXmlApplicationContext.getBean("queryService"); String queryServiceResult = queryService.queryPayList(); System.out.println(queryServiceResult); System.in.read(); } }最终输出的结果可以在源码中查看,后文会贴上源码的地址。
从上面的实例来看,理论上其实可以不引入zookeeper也能完成远程调用,但是如果没有zookeeper,客户端维护服务端的远程调用地址就是一个很头疼的活儿,这也是zookeeper的主要作用。
引入zookeeper之后,客户端无需维护url属性,只需将上述的<dubbo:register/>中指定address即可,如下所示:
<dubbo:registry address="zookeeper://127.0.0.1:2181"/>客户端和服务端均需要配置,完成配置之后,启动zookeeper,就无需在客户端维护不同的服务端地址。
dubbo只是一个RPC框架么?其实从某一种程度上来讲,dubbo不只是一种RPC框架,dubbo可以支持所有主流的注册中心,针对RPC的协议,dubbo还支持rmi,hessian,http,webservice等,并不是只支持dubbo。下面以集成webservice协议为例来进行总结
这个配置可以和之前的<dubbo:protocol name = "dubbo" port = "20880"/>共存
之后通过浏览器就可以查看wsdl文档了。这里就不再详细贴图了。
总之除了dubbo协议,其实dubbo还可以提供rest,HTTP的远程调用协议,所以与其说dubbo是一个RPC调用框架,倒不如说它是一个分布式服务治理组件。
这个是dubbo的监控平台,我们需要从github上下载然后即可使用,下载地址:https://github.com/apache/dubbo-admin
使用步骤就在其readme文档中
无非就是先clone下来代码,然后修改配置文件中的注册中心地址,改为我们应用的注册中心地址,使用maven构建完成之后,运行打包成功的jar包之后,就可以看到dubbo-admin的界面了,其中还支持zookeeper的元数据配置。这个参考相关文档即可。
先贴一张maven构建成功后的截图
然后贴一张运行成功后截图
dubbo不只是RPC,后续会用dubbo体验一下负载均衡