windows下搭建dubbo+zookeeper环境与使用
windows下搭建dubbo+zookeeper环境与使用
【转摘】
之前在网上学到用linux搭建,便想着用windows试试。经过一番折腾终于弄了出来。故写这篇文章也是做一个总结,理一理我遇到的一些问题。
因为我之前的工程是用maven搭建的,所以这是基于整合ssm框架的maven工程。
那么首先应该谈一谈为什么要使用dubbo:
随着互联网的发展,或许网站的规模会越来越大,常规的垂直应用架构已无法应对,那么这个时候仅仅靠一台服务器是不够的。所以需要进行分布式架构。
那么这里,就有了问题,当服务器多了之后,它们之间是如何进行通讯,也就是调用和访问呢?这就要用到webservice技术了。而当你的系统足够大时,就会有许许多多的服务在通信,这时候就需要一个治理系统来保证有条不紊的演进。Dubbo是阿里开源的分布式服务框架,可以对服务统一治理,监控等等。
这是dubbo的架构图
节点角色说明:
- Provider: 暴露服务的服务提供方。
- Consumer: 调用远程服务的服务消费方。
- Registry: 服务注册与发现的注册中心。
- Monitor: 统计服务的调用次调和调用时间的监控中心。
- Container: 服务运行容器。
正文
zookeeper的安装配置
Zookeeper作为Dubbo服务的注册中心,Zookeeper是hadoop的一个子项目,其发展历程无需赘述。Dubbo原先基于数据库的注册中心,没采用Zookeeper,Zookeeper一个分布式的服务框架,是树型的目录服务的数据存储,能做到集群管理数据,这里能很好的作为Dubbo服务的注册中心,Dubbo能与Zookeeper做到集群部署。官方也是推荐使用zookeeper。
首先下载zookeeper,我这里的版本是3.4.6。解压后进入zookeeper的conf
文件夹修改zoo-simple.cfg
为 zoo.cfg
。
接着用编辑器打开zoo.cfg
文件,做如下操作
接着就是启动zookeeper,进入bin文件夹 启动zkServer.cmd
这样,便是启动成功了,因为我的是在本机上部署的,所以ip地址是回环地址0,0,0,0。端口号则是之前默认设置的2181。注意 :这个窗口不要关闭!让注册中心服务一直运行。
生产者和消费者项目的运行
因为我的是maven工程,所以要添加依赖
-
<dependency>
-
-
<groupId>com.alibaba</groupId>
-
-
<artifactId>dubbo</artifactId>
-
-
<version>2.5.3</version>
-
-
</dependency>
-
-
<dependency>
-
-
<groupId>org.apache.zookeeper</groupId>
-
-
<artifactId>zookeeper</artifactId>
-
-
<version>3.4.6</version>
-
-
</dependency>
-
-
<dependency>
-
-
<groupId>com.github.sgroschupf</groupId>
-
-
<artifactId>zkclient</artifactId>
-
-
<version>0.1</version>
-
-
</dependency>
同时,在业务层做如下,这里给出我的例子,接口及实体类省略。
-
-
-
public class ItemServiceImpl implements ItemService {
-
-
-
-
private TbItemMapper itemMapper;
-
-
-
-
public TbItem getItemById(long itemId) {
-
-
TbItem item = itemMapper.selectByPrimaryKey(itemId);
-
-
return item;
-
-
}
-
-
}
控制层
-
-
-
public class ItemController {
-
-
-
-
private ItemService itemService;
-
-
-
-
-
-
public TbItem getItemById(
-
-
TbItem tbItem = itemService.getItemById(itemId);
-
-
return tbItem;
-
-
}
-
-
}
好了,写完这些,我们还要在配置文件中添加dubbo的配置。
首先,在业务层中作为生产者,需要在spring配置文件中添加如下
-
<!-- 发布dubbo服务 -->
-
<!-- 提供方应用信息,用于计算依赖关系 -->
-
<dubbo:application name="eshop-manager" />
-
<!-- 注册中心的地址 -->
-
<!--这里因为我的zookeeper注册在本机,所以ip地址是这个,大家根据自己的不同修改-->
-
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" />
-
<!-- 用dubbo协议在20880端口暴露服务 -->
-
<dubbo:protocol name="dubbo" port="20880" />
-
<!-- 声明需要暴露的服务接口 -->
-
<dubbo:service interface="com.eshop.service.ItemService"
-
ref="itemServiceImpl" />
注意,scheme不要忘了引入
-
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
-
http://code.alibabatech.com/schema/dubbo
另外,scheme文件要手动添加,在eclipse
中点击Windows-->preference
,在搜索框输入xml
,点击XML Catalog
,找到add
添加,如下图
同时,作为消费者的控制层也要添加如下,scheme导入同上
-
<!-- 引用dubbo服务 -->
-
<dubbo:application name="eshop-manager-web" />
-
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" />
-
<dubbo:reference interface="com.eshop.service.ItemService"
-
id="itemService" />
补充说明:
-
dubbo:registry 标签一些属性的说明:
- register是否向此注册中心注册服务,如果设为false,将只订阅,不注册。
- check注册中心不存在时,是否报错。
- subscribe是否向此注册中心订阅服务,如果设为false,将只注册,不订阅。
- timeout注册中心请求超时时间(毫秒)。
- address可以Zookeeper集群配置,地址可以多个以逗号隔开等。
-
dubbo:service标签的一些属性说明:
- interface服务接口的路径
- ref引用对应的实现类的Bean的ID
- registry向指定注册中心注册,在多个注册中心时使用,值为的id属性,多个注册中心ID用逗号分隔,如果不想将该服务注册到任何registry,可将值设为N/A
- register 默认true ,该协议的服务是否注册到注册中心。
dubbo admin UI工具的安装
这个是dubbo的客户端监控中心。
我的版本是dubbo-admin-2.5.4.war,大家可以在网上下载到,解压后放到tomcat安装处的webapps
下
这里注意,如果监控中心与注册中心在同一台服务器上,可以不需要任何配置。
如果不在同一台,则需要修改解压文件后的WEB-INF
下的dubbo.properties
文件
这里的ip地址就需要修改了。
dubbo.registry.address=zookeeper://127.0.0.1:2181
配置好后,启动tomcat,在浏览器中输入http://localhost:8080/dubbo
(这里的dubbo是我的dubbo admin的项目名字,可以更改。)登录时需要用户名root
和密码root
。
就可以看到如下图片,有提供者和消费者注册的服务了。我们也可以对它们进行管理操作。
另外,这里谈一谈我在实践中遇到的问题,花费了不少的时间。
在运行的时候经常报错,无非是如下这里个问题,我做一个归纳:
- 读取配置文件问题,看一看web.xml有没有读入
- 注解导包是否正确,有没有缺少什么
- 别忘了pojo类实现序列化接口
- 防火墙或许对你来说是个问题。
总结
到此基本上就已经结束了,只是明白了dubbo最基本的使用,即应用之间的rpc调用,服务提供者和使用者。Dubbo还提供了其他很多高级特性,如路由规则、参数回调、服务分组、服务降级等等,而且很多特性在给出内置实现的基础上,还给出了扩展的接口,我们可以给出自定义的实现,非常方便而且强大。至于zookeeper,我这里也只是单机配置,还没有尝试集群配置。以后再慢慢深入研究。