因为接下去工作中RPC框架是使用Dubbo,所以试着用了一下,写了简单的provider和comsumer测试。之前所在公司用的是自研的RPC通信框架,大体上感觉差不多,唯一的区别应该就是服务发现和治理上的,Dubbo使用了zookeeper,等之后的文章再具体分析。
一、环境搭建
todo 这个后续再补充,测试的时候为了方便,直接使用了现成的线下环境。
二、服务提供方配置 provider
通过spring-boot 快速搭建工程,因为spring官方没有dubbo的starter,所以新建完成后,需要手动引入dubbo的maven依赖。
添加服务提供方配置文件 provider.xml。文件的内容如下,具体的配置属性可以查看官方文档
http://dubbo.apache.org/books/dubbo-user-book/references/xml/introduction.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32<?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://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 应用配置名称 -->
<dubbo:application name="lingshenghang-test-provider" />
<!-- 注册中心配置,使用zookeeper注册中心暴露服务地址 -->
<dubbo:registry address="zookeeper://10.XXX.XXX.XXX:2181"/>
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880"
threads="400" />
<!--filter="-exception,eduexception" serialization="fastjson"/> -->
<!-- 名字如果和dubbo默认的filter前缀名字重的话,会默认选择dubbo的filter,比如使用exception,则会默认使用到ExceptionFilter -->
<!--<dubbo:provider timeout="10000" loadbalance="random"-->
<!--executes="300" actives="20" filter="-exception,eduexception" />-->
<!-- 服务提供 -->
<dubbo:service
interface="com.example.dubbo.TestProviderService"
ref="testProviderService"/>
<!--<dubbo:protocol name="dubbo" port="20880" />-->
<!--<dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoServiceLocal" />-->
<!--<dubbo:reference id="demoServiceRemote" interface="com.alibaba.dubbo.demo.DemoService" />-->
</beans>创建服务接口和服务接口实现,这个就是你要提供的服务接口
1
2
3public interface TestProviderService {
void getName();
}暴露服务
都可以通过注解方式和通过xml配置方式。
注解方式
在类上打@Service注解,注意是dubbo的@Service不是Spring的@Service。 同时在 xml中加上dubbo:annotation指定启动扫描路径。
1
2
3<!-- 暴露dubbo服务的方式 -->
<!-- 使用注解方式暴露接口,会自动扫描package下所有包中dubbo相关的注解,这样就不用在xml中再针对每个服务接口配置dubbo:service interface-->
<dubbo:annotation package="com.example.dubbo"/>xml配置
1
2
3<!-- 服务暴露 -->
<dubbo:service interface="com.example.dubbo.TestProviderService"
ref="testProviderService"/>
然后就可以启动看看了。
我启动时候碰到了问题,没有引入zookeeper的包,在pom.xml中加上就行。
为消费方提供jar包
三、服务消费方配置 comsumer
和服务提供一样,先搭个spring项目,引入dubbo的maven依赖。
引入 服务方提供的jar包。
添加dubbo配置文件,comsumer.xml
要注意的点是,dubbo:application 需要唯一,不能和服务提供方一样。
1 | <?xml version="1.0" encoding="UTF-8"?> |
创建远程服务
也是两种方式,注解和xml
注解方式
在类的远程成员变量上加上@Reference,同时需要在xml中添加配置
1
2<!-- 使用注解方式创建远程服务代理-->
<dubbo:annotation package="com.example.dubbo"/>xml方式
添加xml中配置
1
2
3
4<!-- 使用xml配置方式创建远程服务代理,id即为provider.xml中暴露的服务的id-->
<!-- 等同于dubbo:annotation 加上代码里的@Reference注解-->
<dubbo:reference id="testProviderService"
interface="com.example.dubbo.TestProviderService"/>
创建一个测试Controller
1
2
3
4
5
6
7
8
9
10
11
12
13
public class ComsumerController {
private TestProviderService testProviderService;
"/canbuy") (
public void testComsumer() {
testProviderService.getName();
}
}启动工程,测试
注意如果是同一台机器上启动的话,要修改下两者的tomcat端口。在一个工程里的application.properties中添加server.port=8011。
可以上 dubbo admin 网址,查看应用名和服务名。