Dubbo采用全spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。那么Dubbo应该怎么使用呢?下面我将揭晓答案。
如果不用Dubbo,单一工程中spring的配置可能如下:
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
一旦用了Dubbo,在本地服务的基础上,只需做简单配置,即可完成远程化服务。例如,将上面的配置文件拆分成两份,将服务定义部分放在服务提供方remote-provider.xml,将服务引用部分放在服务消费方remote-consumer.xml,并在提供方增加暴露服务配置<dubbo:service>
,在消费方增加引用服务配置<dubbo:reference>
。所以,我们要是使用了Dubbo的话,就要分为发布服务和调用服务两部分了,发布服务方式如下:
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
(表现层)调用服务的方式如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
下面我们便以一个具体的例子来说明dubbo的使用方法,我们的需求是,想根据商品的ID来查询商品的详细信息,商品表是tb_item,如下图所示。
既然要查询就要有接口,我们在taotao-manager-interface工程下新建包com.taotao.service,并在该包下新建ItemService接口类,在该接口中添加一个根据ID查商品的方法,如下图所示。
由于taotao-manager-service和taotao-manager-interface都是独立的jar工程,要想在taotao-manager-service中引用taotao-manager-interface的接口就需要在taotao-manager-service的pom.xml文件中添加对taotao-manager-interface的依赖,如下图所示。
如果我记得没错的话,之前我就已添加过了。
然后我们在taotao-manager-service的com.taotao.service.impl包下新建一个实现类,如下图所示。
下面我们来发布dubbo服务,当然,在此之前我们需要先把dubbo相关的包给引进来,我们需要在taotao-manager-service工程的pom.xml文件中添加这三者的依赖。
- 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
- 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
这儿,大家要注意,dubbo-2.5.3.jar包下面依赖了一个spring-2.5.6.SEC03.jar包,要知道我们整个工程现在所使用的spring都是4.2.4版本的,这儿冒出个2.5.6版本,这就有可能会产生冲突,那么这个2.5.6版本的spring包是从哪儿来的呢?其实是依赖传递过来的。所以我们应在dubbo中去掉对spring-2.5.6的依赖。同理,我们还要在dubbo中去掉对netty-3.2.5的依赖,maven更新之后,我们来查看下taotao-manager-service目前所依赖的jar包情况,如下图所示。
如此一来,当前taotao-manager-service工程的pom.xml文件的全部内容如下:
- 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
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 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
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
现在我们开始发布服务,我们在taotao-manager-service工程的applicationContext-service.xml文件中发布服务。
首先我们需要在文件头部添加对dubbo的引用及约束,如下所示。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
效果如下:
接下来为了能让eclipse能够识别dubbo的约束,我们需要手动配置一下该约束。我也相信大家都能配置,故在此不再赘述。配置好了dubbo的约束之后,我们再看看是否还有别的约束需要配置,如果还有其他约束需要配置就配置一下,这里也不再赘述。
下面我们在applicationContext-service.xml文件中添加如下配置:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
其中<dubbo:application name="taotao-manager" />
是用来配置在注册中心的名字,标识我们当前应用的一个名称,你可以随便起,但是最好不要跟其他的应用重复,最好跟你的工程名相对应。我们注意到我们在声明需要暴露的服务接口的时候,ref=”itemServiceImpl”这句话,我们并没有声明过id为itemServiceImpl的类,为什么可以直接使用呢?这是因为我们配置了<context:component-scan base-package="com.taotao.service"/>
扫描范围,我们在com.taotao.service包下新建了一个ItemServiceImpl的实现类并且我们没有明确指定其ID,这样的话,系统会默认它的首字母小写作为ID,这样虽然我们没有明确定义id为itemServiceImpl的bean,我们依然还是可以使用的。另外注意<dubbo:registry protocol="zookeeper" address="192.168.25.167:2181" />
配置的IP地址是我们安装dubbo的虚拟机的IP地址,其中2181是zookeeper默认运行的端口号,即客户端连接服务端的端口号是2181。
这样一来,当前applicationContext-service.xml文件的全部内容如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
至此,我们就发布了一个服务。