Dubbo[]是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。java
其核心部分包含:git
----------------------------------------------------------------------------------------------------------------------------------------------------github
****************************************************************************************************************************spring
----------------------------------------------------------------------------------------------------------------------------------------------------apache
以上内容来源Dubbo官网,另外深刻学习Dubbo必须访问的站点就是它的官网.我这里只是写一个简单的使用教程,有一个快速入门的基础.session
Dubbo官方资源(由于'墙'缘由,部分资源无响应.图鉴使用github下载源码):app
我这里讲解的dubbo2.4.11版本,其余各版本大致相同,具体差别可能也有.须要去查看相关的document:负载均衡
生产者配置:框架
<description>dubbo配置示例之生产者配置</description> <!-- 生产者的项目配置 --> <dubbo:application id="demoApplication" name="demoApplication" owner="pan" organization="cn" logger="slf4j" compiler="javassist"/> <!--协议,能够配置多个--> <dubbo:protocol id="demoServerProtocol" name="dubbo" port="-1" dispatcher="message" threadpool="limited" threads="20"> </dubbo:protocol> <!--注册中心--> <dubbo:registry id="demoServerRegistry" protocol="zookeeper" address="zk地址" client="zkclient" group="族的位置" session="60000" register="false" subscribe="false" check="false" file="demo_erver-registry-cache.properties"> </dubbo:registry> <!--生产者配置--> <dubbo:provider id="demoServerProvider" application="demoServerApplication" registry="demoServerRegistry" protocol="demoServerProtocol" cluster="failover" loadbalance="leastactive" serialization="hessian2" retries="0" timeout="15000" proxy="javassist" delay="-1"> </dubbo:provider> <!--生产者的接口提供远程调用的bean ref是对应的bean名--> <dubbo:service interface="com.pan.demo.service.Service1" ref="demoService1"/> <dubbo:service interface="com.pan.demo.service.Service2" ref="demoService2"/> <dubbo:service interface="com.pan.demo.service.Service3" ref="demoService3"/>
(1)同一IP运行起来几个Provider,listen 端口号从默认端口号向大绑定:将port配置为-1maven
而后,消费者依赖生产者.
消费者的配置:
<description>dubbo示例之消费者配置</description> <!--注册中心--> <dubbo:registry id="demoClientRegistry" protocol="zookeeper" client="zkclient" address="zk注册中心地址" group="组地址" subscribe="true" check="false" file="demo_client_dubbo_registry_cache.properties"> </dubbo:registry> <!--消费者配置--> <dubbo:consumer id="demoServiceConsumer" registry="demoClientRegistry" init="false" check="false" timeout="15000" retries="0"> </dubbo:consumer> <!-- 消费者获取远程对象注入本地接口配置的bean --> <dubbo:reference id="demoClientService1" interface="com.pan.demo.Service1" consumer="demoServiceConsumer"/> <dubbo:reference id="demoClientService2" interface="com.pan.demo.Service2" consumer="demoServiceConsumer"/> <dubbo:reference id="demoClientService3" interface="com.pan.demo.Service3" consumer="demoServiceConsumer"/>
总结,使用dubbo远程调用的前提:
1.安装配置好zookeeper或者其余服务监听框架.
2.引入jar包.
3.生产者与消费者都须要引入zookeeper,zkclient,dubbojar,spring,log4j包.
4.消费者依赖生产者或者他们共同依赖同一个接口.
4.其余一些异常处理...例如check文件共用了之类的.
好了,如今能够远程调用了.
@Resource("demoClientService1")//能够不指定名称,前提是bean配好. private DemoService1 service ; public static void main(String[] args){ sysoout(service.foo("word")) ; }
OK,使用已经能够了.
具体配置的含义,请参照官方文档.这里写出来太多了.
以后会写一些阅读源码的心得,以及metaq的使用.
maven的基本依赖一份:
<!-- 基本配置 --> <properties> <spring.version>4.3.3.RELEASE</spring.version> <zookeeper.version>3.4.9</zookeeper.version> <zkclient.version>0.9</zkclient.version> <dubbo.version>2.4.11</dubbo.version> <junit.version>4.12</junit.version> </properties> <!-- 基本依赖 --> <dependencies> <!-- https://mvnrepository.com/artifact/org.springframework/spring-context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-core --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-test --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper --> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>${zookeeper.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.7</version> </dependency> <!-- https://mvnrepository.com/artifact/com.101tec/zkclient --> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>${zkclient.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/com.alibaba/dubbo --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>${dubbo.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/junit/junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> </dependency> </dependencies>
项目依赖根据本身须要调用的接口加入.