下载dubbo-admin-x.x.x并解压
Dubbo 采用全Spring配置方式,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。
pom添加相关依赖(zookeeper dubbo interface):
<dependencies>
...
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>${zookeeper.version}</version>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>${zkclient.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
</dependency>
...
<!-- 以及interface依赖 -->
</dependencies>
dubbo项目需要三种模块:
- interface 模块。
- provider 模块。暴露服务的服务提供方。
- consumer 模块。调用远程服务的服务消费方。
服务提供方配置文件 spring-provider.xml:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 应用名 -->
<dubbo:application name="dubbodemo-provider"/>
<!-- 连接到注册中心 -->
<dubbo:registry id="dubbodemo" address="${dubbo.registry.address:zookeeper://localhost:2181"}/>
<!-- 通过dubbo协议,在zookeeper注册中心28080端口暴露服务 -->
<dubbo:protocol name="dubbo" port="28080"/>
<!-- 注册服务 即声明需要暴露的服务接口-->
<dubbo:service registry="dubbodemo" timeout="3000" interface="com.xxx.service.XxxService" ref="xxxService"/>
<dubbo:service interface="com.xxx.MemberService" ref="memberService" register="${dubbo.registry.register:true}" timeout="100000" />
</beans>
服务消费方配置文件 spring-consumer.xml:
<beans xmlns="http://www.springframework.org/schema/beans"
...
<!-- 应用名 -->
<dubbo:application name="dubbodemo-consumer"/>
...
<!-- 生成远程服务代理,可以和本地bean一样使用xxxService -->
<dubbo:reference id="xxxService" interface="com.xxx.service.XxxService"/>
</beans>
主要参数:
application 声明当前应用信息,用来给 zookeeper 注册中心计算应用间依赖关系。
registry 声明一个注册中心(注意:如果是使用本地服务器,保证与本地配置属性值一致)
protocol 声明该应用通过dubbo协议可以在端口28080暴露服务,其他应用可以通过这个端口调用服务
service 声明需要暴露的服务接口XxxService,并将接口注册到dubbodemo注册中心
reference 声明引用一个服务。
常用属性
提供者:
<!-- 提供者公共配置 -->
<dubbo:provider retries="0" protocol="rest"
delay="${dubbo.provider.delay:-1}" threads="${dubbo.provider.threads:100}"
timeout="${dubbo.rest.timeout:10000}" />
消费者:
<!-- check为true的时候,如果该接口挂了,本应用就跑不起来了-->
<dubbo:reference interface="com.foo.BarService" check="false" />
<!-- 提供者公共配置 -->
<!-- 关闭所有服务的启动时检查 -->
<dubbo:consumer check="false" />
<!-- 配置重试次数,最好只用于读的重试,写操作可能会引起多次写入。默认retries="0"-->
<dubbo:service retries="2" />
<dubbo:reference retries="2" />
<dubbo:reference>
<dubbo:method name="findFoo" retries="2" />
</dubbo:reference>
也可以使用properties文件(DUBBO 在读取配置的时候会先读取 XML文件中的配置,如果没找到就会默认去读取resources目录下的 dubbo.properties 文件。):
# 应用名
dubbo.application.name = dubbodemo-consumer
# 注册中心地址
dubbo.registry.address = zookeeper://localhost:2181
# 调用协议地址
dubbo.protocol.name = dubbo
dubbo.protocol.port = 28080
同样也可以在web.xml中引入自定义.properties文件,consumer.xml或provider.xml
<context:property-placeholder location="classpath:xxx-web.properties" file-encoding="utf-8" ignore-resource-not-found="true" />
<import resource="classpath:/META-INF/xxx-consumer.xml" />
底层Dubbo详细分析 可以参考: 从头开始搭建一个dubbo+zookeeper平台
网友评论